二者作用:解决HTTP协议无状态的缺陷,在客户端/服务器端保存会话状态。
创建Session过程:
- 检查客户端请求中是否包含一个session标识(session id)
- 若包含,则说明之前已经为此客户端创建过session。服务器按照此session id检索出session
- 若不包含,则为此客户端创建一个session,并生成一个session id。此session id将作为响应返回给客户端保存。(使用Cookie保存)
若Cookie被禁止,必须有其他机制能够把session id回传给服务器
回传session id至服务器:
- URL重写:把session id直接附加在URL路径后面
- 隐藏表单字段
Cookie和Session的区别:
- Cookie中只能保存ASCII字符串,Session中可以保存任意类型的数据,甚至Java Bean乃至任何Java类、对象等
- 隐私策略不同。Cookie存储在客户端,对客户端是可见的,可被客户端窥探、复制、修改。而Session存储在服务器上,不存在敏感信息泄露的风险
- 有效期不同。Cookie的过期时间可以被设置很长。Session依赖于名为JSESSIONI的Cookie,其过期时间默认为-1,只要关闭了浏览器窗口,该Session就会过期,因此Session不能完成信息永久有效。如果Session的超时时间过长,服务器累计的Session就会越多,越容易导致内存溢出。
- 服务器压力不同。每个用户都会产生一个session,如果并发访问的用户过多,就会产生非常多的session,耗费大量的内存。因此,诸如Google、Baidu这样的网站,不太可能运用Session来追踪客户会话。
- 浏览器支持不同。Cookie运行在浏览器端,若浏览器不支持Cookie,需要运用Session和URL地址重写。
- 跨域支持不同。Cookie支持跨域访问(设置domain属性实现跨子域),Session不支持跨域访问
参考:理解Cookie和Session机制
更多文章请访问我的博客:http://voidman.xyz