当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为 session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个 session id将被在本次响应中返回给客户端保存。
sessionid 存在于浏览器内存的cookie中 或者url中
session存在内存中与sessionid有者对应的关系
与cookie存在硬盘中不同
cookie
c请求
s 回应 setcookie
c 存储cookie 硬盘 或内存(会话cookie
对服务器会话 含有cookie
s接受识别cookie
session
保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于SEEESIONID,而。比如weblogic对于web应用程序生成的cookie。
如果cookie禁用 php层会自动重写url对应cookie
php.ini中,把session.use_trans_sid设成1,那么连接的后面就会自己加sessionid
session_id是浏览器内存的,默认生命周期为浏览器生命周期
即使用被盗,如果你用另一个浏览器,则会自动生成一个新的session_id
所以被盗可能为0
也就是说,如果在同一机换一浏览器,或在不同机用同一浏览器,session_id自动分配新的
session_id是存在有效期的,而且是乱数生成,基本不可能被推测出来。
PHP默认下,session_id虽然被保存在cookie,但是,当网页被关闭之后,session_id也会消失,这是其一,
其二,服务器上的session是存在有效期的,超过一段时间没有访问,就算得到原来的session_id也是无效的。
大量的用户访问 使用session会对服务器造成影响。
而cookie是客户端而言的
服务器发送header包含setcookie:abc
然后客户端本地创建一个cookie项:abc
这样每次访问 数据库里存储abc到了哪里 以此来判断用户偏号
而服务器本身是不存储cookie 所以cookie判断登入状态是需要验证的
cookie是在客户端自己保存信息的
而SessionID是通过复杂算法产生的长整型数据 几乎没法伪造 所以session保持登入状态是不需要验证的
而cookie是保存在客户端 服务端没有 如果用来判断登入状态 就需要服务端数据库里存储
然后判断 因为有着相关性 所以是可以伪造的
所以一般cookie多是 用来自动补充用户名密码 但是却不会用来自动登入
sessionid被截取了呢?安全性也会有问题 但是如上面所述
安全性问题肯定会有的 不过非常小