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'];时,是成功的。