噶,nation同志又给我布置任务了~~是隔壁家老王提到屡次的,session和cookie的运行机制问题~~因而我真的意识到一个问题,程序猿都是一个德行!php
cookie 经常使用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机经过浏览器请求页面时,它同时会发送 cookie。经过 PHP,可以建立并取回 cookie 的值。数据库
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 个。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传递回服务器。url
session是以文件的形式保存的。php.ini中有个配置项--session.save_path= "";能够定义session的保存路径。session文件的命名格式是:"sess_[PHPSESSID的值]"。每个文件,里面保存了一个会话的数据。其实只要使用代码$_SESSION['user_id'] = $value;就会促发php的session机制,结果往对应的session文件中写入一个值。spa
3.1 cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。cookie数据存放在客户的浏览器上,session数据放在服务器上。
3.2 cookie明文保存,能够修改,不是很安全,别人能够分析存放在本地的cookie并进行cookie欺骗。考虑到安全方面,应当使用session。
3.3 session会在必定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用cookie。
因为 Http 协议的请求过程,是基于 TCP/IP 的,当客户端请求服务器,服务器处理后,进行响应,这个过程是无状态的。在有些时候,是须要保存一些客户端的请求信息,识别客户端的某些状态,智能的、有针对性的去分析某些客户端的习惯。这些时候,就须要去记录客户端的链接状态,识别请求的状态等。为了解决相似的事情,就须要使用到了Cookie 和 Session。