cookie 的传递过程

今天没事,突然想到cookie的一些问题,于是就打算自己尝试一下。

php源代码如下:

<?php
       setcookie('xxx', 'yyyyyyyyyyyyy');  
    print_r($_COOKIE);
?>

当浏览器请求这个页面时,服务器会自动设置cookie为 xxx:yyyyyyyyyyyyy 并且会把服务器端的$COOKIE数组中的所有值打印出来。

第一次访问页面

image

我们可以看到,响应头中有xxx:yyyyyyyyyyyyy 这个cookie 说明服务端正在告诉浏览器,命令他把 cookie设置成这个值,下次访问这个页面的时候再发给服务端。注意观察,此时的请求头中并没有cookie字样,服务端的cookie数组也是空,也就是说第一次访问并没有带cookie 服务端也就没有保存cookie。

第二次访问页面

image

我们看到,浏览器听从了服务器的指令,把自己的cookie设置成了约定好的值,发送给服务器,服务器也把这个值存到自己的$_COOKIE中。

cookie 如何维持登录

用户的登录信息会保存(加密)在cookie中,当用户再次访问的时候服务器会解密cookie,把信息和数据库中的用户信息比对,一致就自动访问了,不用客户端再输入信息。

如何进行cookie 欺骗

另一种机制 session

Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是session.

那么Session在何时创建呢?不同的语言有不同的实现方试。

在创建了Session的同时,服务器会为该Session生成唯一的Session id,而这个Session id在随后的请求中会被用来重新获得已经创建的Session;在Session被创建之后,就可以调用Session相关的方法往Session中增加内容了,而这些内容只会保存在服务器中,发到客户端的只有Session id;当客户端再次发送请求的时候,会将这个Session id带上,服务器接受到请求之后就会依据Session id找到相应的Session,从而再次使用之。正式这样一个过程,用户的状态也就得以保持了。

而session id 的传输需要cookie的配合,这也就是经常在cookie 中看到sessionID的原因了

cookie 和session的区别

1.cookie数据存放在客户的浏览器上,session数据放在服务器上;

2.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session;

3.session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用COOKIE;

4.单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能超过3K;