session与cookie的理解

噶,nation同志又给我布置任务了~~是隔壁家老王提到多次的,session和cookie的运行机制问题~~于是我真的意识到一个问题,程序猿都是一个德行!

1. cookie概述

cookie 常用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie。通过 PHP,能够创建并取回 cookie 的值。

cookie主要包括 名字、值、过期时间、路径和域。路径和域一起构成cookie的作用范围。

如果不设置过期时间,cookie默认的生命期为浏览器会话期间。关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie,被称为会话cookie。会话cookie一般保存在内存里面,而不是存储在硬盘上。

如果设置了过期时间,浏览器就会把cookie保存在硬盘上。在有效的过期时间范围内,关闭以后再次打开浏览器,cookie仍然有效。存储在硬盘上的cookie可以再不同的浏览器进程间共享。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。

cookie值只能保存字符串。而且浏览器对它有大小限制以及 它会随着每次请求被发送到服务器,所以应该保证它不要太大。 Cookie的内容也是明文保存的,有些浏览器提供界面修改,所以, 不适合保存重要的或者涉及隐私的内容。

大多数浏览器支持最大为 4096 字节的cookie,限制了cookie的大小,所以最好用cookie 来存储少量数据,或者存储用户 ID 之类的标识符。用户 ID 随后便可用于标识用户,以及从数据库或其他数据源中读取用户信息。 浏览器还限制站点可以在用户计算机上存储的cookie的数量。大多数浏览器只允许每个站点存储 20 个cookie;如果试图存储更多cookie,则最旧的cookie 便会被丢弃。有些浏览器还会对它们将接受的来自所有站点的cookie总数作出绝对限制,通常为 300 个。

2. session概述

session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。它的工作机制是:为每个访问者创建一个唯一的id(UID)来存储变量。UID一般存储在cookie中,通过url进行传导。

session机制采用的是在服务器端保持状态的方案。 当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。一般这个cookie的名字都是类似于SEEESIONID。当cookie被人为的禁止时,则必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。

session是以文件的形式保存的。php.ini中有个配置项--session.save_path= "";可以定义session的保存路径。session文件的命名格式是:"sess_[PHPSESSID的值]"。每一个文件,里面保存了一个会话的数据。其实只要使用代码$_SESSION['user_id'] = $value;就会促发php的session机制,结果往对应的session文件中写入一个值。

3. cookie与session的区别

3.1 cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。cookie数据存放在客户的浏览器上,session数据放在服务器上。

3.2 cookie明文保存,可以修改,不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗。考虑到安全方面,应当使用session。

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

4. 为什么要用cookie和session

由于 Http 协议的请求过程,是基于 TCP/IP 的,当客户端请求服务器,服务器处理后,进行响应,这个过程是无状态的。在有些时候,是需要保存一些客户端的请求信息,识别客户端的某些状态,智能的、有针对性的去分析某些客户端的习惯。这些时候,就需要去记录客户端的连接状态,识别请求的状态等。为了解决类似的事情,就需要使用到了Cookie 和 Session。

posted @ 2014-07-22 15:47  三变  阅读(361)  评论(0编辑  收藏  举报