session是cookie的升级版 cookie是把信息记录在客户端,而session是把信息记录在服务器端
服务器存储信息的方式可以在内存中,可以在数据库中和文件中
过程如下
1 | (1)浏览器 --> 服务器 发起请求 |
具体:当你第一次访问一个网站的时候,网站服务器会在响应头内加上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的默认设置,所以安全性存在问题,目前会被微信浏览器禁用