session工作机制

session是cookie的升级版 cookie是把信息记录在客户端,而session是把信息记录在服务器端

服务器存储信息的方式可以在内存中,可以在数据库中和文件中

过程如下

1
2
3
4
(1)浏览器 --> 服务器 发起请求
(2)浏览器 <-- 服务器 响应请求 附带了setCookie 通过cookie设置了sessionid的name和值
(3)浏览器 --> 服务器 再次发起请求 附加了cookie数据
(4)浏览器 <-- 服务器 再次响应请求 因为cookie数据中附带了sessionid的name和值 所以就知道了浏览器的会话是同一次,并且不再需要设置

具体:当你第一次访问一个网站的时候,网站服务器会在响应头内加上Set-Cookie:PHPSESSID=nj1tvkclp3jh83olcn3191sjq3(php服务器),或Set-Cookie JSESSIONID=nj1tvkclp3jh83olcn3191sjq3(java服务器)信息,此信息是服务器随机生成的,放在服务器内存里,为了标识唯一的客户端用户,内容不会重复,这就是sessionid.该Cookie为服务器自动生成的,它的maxAge属性一般为-1,表示仅当前浏览器内有效,并且各浏览器窗口间不共享,关闭浏览器就会失效。因此同一机器的两个浏览器窗口访问服务器时,会生成两个不同的Session。但是由浏览器窗口内的链接、脚本等打开的新窗口(也就是说不是双击桌面浏览器图标等打开的窗口)除外。这类子窗口会共享父窗口的Cookie,因此会共享一个Session。

所以理论上有了cookie功能,就一定可以有session功能.如果没有cookie功能的话,也可以通过url传参的方式,使得session仍旧可以实现

php内置了的session功能 并且有一个$_SESSION的全局数组存入或读取数组 还会自动把数据存入文件
session配置在php.ini文件中可以修改

很多框架已经重写了php默认的session处理机制,达到加密的效果

ps:在tp3.23中增加了session的配置项,但默认是php的默认设置,所以安全性存在问题,目前会被微信浏览器禁用