目录
- Cookie
- Session
- 什么是Session?
- 关于Session
- Session的传递方式
- Application
Cookie
- 本身用于浏览器和服务端通讯
- 存放在客户端中,可以设置过期时间
缺点:
- 大小限制,4k
- 不确定性:用户可以删除cookie或禁用
- 安全风险:可伪造修改
推荐阅读:cookie localStorage sessionStorage
Session
什么是Session?
当用户通过浏览器访问服务器时,服务器本身并不知道是谁来访问的(http
协议是无状态的)。
于是,服务器就给每个访问者进行临时编号(即,给每个访问者创建对应的session
会话)。
与此同时,为了方便一段时间内访问者都可以对服务器“自由访问”,服务器就把临时编号(sessionID
)传给访问者(存储在客户端的cookie
中,当浏览器关闭时释放;或跟在URL
地址后面)
在这段时间内,需要进行请求验证时,服务器就可以直接拿着访问者的临时编号进行验证。
注意: 这个浏览器指的是浏览器窗口,或者是浏览器的子窗口。意思就是,只允许当前这个session
对应的浏览器访问,就算是在同一个机器上新启的浏览器也是无法访问的。而另外一个浏览器也需要记录session
的话,就会再启一个属于自己的session
关于Session
- 每个用户访问服务器时,都会在服务端创建一个相对应的
Session
,分配的SessionID
是唯一的,用来标识不同的用户 - 为了获取更快的存储速度,服务端可以把
Session
保存在内存中(当然也可以存储在文件中,数据库中),因此放在Session
中的信息应该精简,避免内容过于复杂,当大量用户访问时可能导致内存溢出 Session
是具有生命周期的,当超过了这段时间,Session
就会失效Session
生成后,只要用户继续访问,服务器就会更新该Session
的最后访问时间,并维护该Session
- 当用户访问过多时,随之创建的
Session
也会变多,为了防止内存溢出的问题,服务器会把长时间没有访问的Session
给删除掉
Session的传递方式
- 通过
Cookie
实现
把sessionID
放在Cookie
里面;
临时Cookie
会在当前浏览器关闭时消失,而Session
也是当浏览器关闭时消失的。因此可以用临时Cookie
存放,而且保存的sessionID
不会重复,因为Cookie
里存储的是键值对,是独一无二的,相同的会被覆盖 - 通过
URL
重写实现
如果浏览器不支持Cookie
的时候,就可以使用URL
重写的方式实现
即,在url
地址后面追加sessionID
- 使用
HTTP
请求头来传输
比如标准的Authorization
,也可以自定义,如X-Auth-SessionID
等。但是这个请求头浏览器不会像cookie
一样自动携带,需要手工处理。
Application
Application
用于保存所有用户的公共数据信息,存放在服务端中Application
适用于任何大小的数据Application
保存期贯穿于整个应用程序的生命期Application
适用于所有用户,是所有用户公用一个
注意: 当网站访问量大的时候会产生严重的性能瓶颈.因此最好不要用此对象保存大的数据集合
举例: 在网页上显示在线人数