cookie,session原理,以及如何使用chrome查看。


首先,先補充下chrome瀏覽器的使用。

1.1、php源碼:

<?php

$cookieDomain = '.elf.com';

setcookie('elf', 'im elf cookie', time()+300, '/', $cookieDomain);

setcookie('aaa', 'aaaa', time()+10);

 

1.2、chrome效果

解釋:頭文件中request headers表示瀏覽器向服務器發送的包頭,告訴服務器我這邊的信息,順帶帶上我所有的cookie(無論你是否請求cookie,只要是本域名下和本域名的主域名下的cookie都返回)。

response headers表示服務器返回給瀏覽器的包頭,其中set-cookie表示服務器說“喂,瀏覽器,給我寫入這些cookie到你本地去”。

同理下圖可以查看cookie。

注意上面兩張圖,沒有PHPSESSID這個cookie喲。。。

1、3,修改服務器代碼如下:

session_start();

echo 'cookie';
var_dump($_COOKIE);

1、4,第一次刷新瀏覽器

 

1,5、第二次刷新瀏覽器

 

兩次刷新略有不同,

第一次刷新:

客戶端沒有任何cookie給服務器,

服務器運行代碼session_start后,會自動生成一個session id,存放在cookie里,該cookie的key默認是PHPSESSID,value就是session id。所以服務器告訴客戶端,“喂,給我set一個cookie,key是。。。value是。。。”

第二次刷新:

客戶端把上一步生成的cookie帶給服務器,也就是PHPSESSID=sjb2vafon1qi710hav8r8j5jl6這個鬼。

服務器雖然有session_start代碼,但是已經生成了一個了,所以沒有關於cookie的操作。

 

關於session id的生成,上面已經說了,session_start時自動生成,每個服務器對應每個瀏覽器的域名(bbs.a.com和login.a.com是不同域名)生成唯一一個,當瀏覽器關閉時,該session id失效,運行session_start會重新生成一個不同的session id存放在本地key為PHPSESSID的cookie里面。

關於session的數據,是存放在該web服務器里面的(默認/tmp目錄),使用$_SESSION命令取session數據時,服務器會自動根據session id去找對應的session數據。

 

 

cookie和session的一個小區別,

如果服務器代碼為setcookie('xxx','xxx',time); $_COOKIE['xxx'];

第一次運行該代碼是取不到cookie的,因為第一次時,客戶端的包頭沒有任何cookie傳遞給服務器,所以$_COOKIE為空,然后服務器返回給客戶端的數據有setcookie,這個時候客戶端才開始寫入cookie到本地。

第二次運行,客戶端包頭就會把本地的所有cookie傳遞給服務器(包含主域名下的cookie)

同理,

換做session就不會有這個問題,比如服務器代碼為session_start();$_SESSION['xxx'] = ‘xxx’; echo $_SESSION['xxx'];

第一次運行時,服務器是能取到key為xxx的session的。因為session_start時,服務器就生成了一個session id,並且在服務器開辟了一個空間存放該session id對應的data,所以$_SESSION['xxx'] = ‘xxx’這一步的數據此時已經寫入到服務器了,

再echo $_SESSION['xxx'];時,是成功的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM