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

 

posted on 2016-07-27 14:51  allen__  阅读(25010)  评论(0编辑  收藏  举报

导航