一、cookie、session 在chrome瀏覽器里如何顯示的。
- php源碼:
<?php
$cookieDomain = '.elf.com';
setcookie('elf', 'im elf cookie', time()+300, '/', $cookieDomain);
setcookie('aaa', 'aaaa', time()+10);
- chrome效果
解釋:頭文件中request headers表示瀏覽器向服務器發送的包頭,告訴服務器我這邊的信息,順帶帶上我所有的cookie(無論你是否請求cookie,只要是本域名下和本域名的主域名下的cookie都返回)。
response headers表示服務器返回給瀏覽器的包頭,其中set-cookie表示服務器說“喂,瀏覽器,給我寫入這些cookie到你本地去”。
同理下圖可以查看cookie。
注意上面兩張圖,沒有PHPSESSID這個cookie喲。。。
- 修改服務器代碼如下:
session_start();
echo 'cookie';
var_dump($_COOKIE);
- 第一次刷新瀏覽器
- 第二次刷新瀏覽器
兩次刷新略有不同,
第一次刷新:
客戶端沒有任何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'];時,是成功的。
源自:https://www.cnblogs.com/alazalazalaz/p/5711157.html