1、HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连 接。这就意味着服务器无法从连接上跟踪会话。
2、Cookie实际上是一小段的文本信息。
客户端请求服务器,如果服务器需要记录该用户状态,就会向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。
服务器还可以根据需要修改Cookie的内容。
如果浏览器不支持Cookie(如大部分手机中的浏览器)或者把Cookie禁用了,Cookie功能就会失效。
不同的浏览器采用不同的方式保存Cookie。(js用document.cookie可查看cookie)
Cookie具有不可跨域名性。(m.baidu.com和www.baidu.com都不行,做特殊处理的话,可以)
Cookie 主要包括 :名字,值,过期时间,路径和域;
3、客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。
Session id是在客户端第一次请求服务器的时候创建的。
当程序需要为某个客户端的请求创建一个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需要使用Cookie作为识别标志。(session id存储在cookie,浏览器不支持cookie时可以用url 参数带session id)
区别
1、Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session,所以将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在COOKIE中。
3、session根据浏览器进程存在而存在,而cookie的生存时间可以设置和调整。
session_start()开启时,生成一个常量 SID,当COOKIE开启时,这个常量为空,当COOKIE关闭时,这个常量中存储了PHPSESSID的值。通过在URL后加一个SID参数来传递SESSIONID的值,从而使客户端页面可以使用SESSION里面的值。 当客户端开启COOKIE和服务器端开启SESSION时。浏览器第一次请求,服务器会向浏览器端发送一个COOKIE里面存储的SESSIONID,当浏览器第二次请求时,会把已存在的COOKIE一起提交到服务器端。