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


一、cookie、session 在chrome瀏覽器里如何顯示的。

  1. php源碼:
<?php

$cookieDomain = '.elf.com';

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

setcookie('aaa', 'aaaa', time()+10);
  1. chrome效果

解釋:頭文件中request headers表示瀏覽器向服務器發送的包頭,告訴服務器我這邊的信息,順帶帶上我所有的cookie(無論你是否請求cookie,只要是本域名下和本域名的主域名下的cookie都返回)。
response headers表示服務器返回給瀏覽器的包頭,其中set-cookie表示服務器說“喂,瀏覽器,給我寫入這些cookie到你本地去”。
同理下圖可以查看cookie。

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

  1. 修改服務器代碼如下:
session_start();

echo 'cookie';
var_dump($_COOKIE);
  1. 第一次刷新瀏覽器

  1. 第二次刷新瀏覽器

兩次刷新略有不同,
第一次刷新:
客戶端沒有任何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


免責聲明!

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



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