HTTP - Session 机制
2016-05-05 12:37
288 查看
HTTP 是种无状态的协议,即使用 HTTP 协议时,每次发送请求都会产生对应的新响应,协议本身不会保留之前一切的请求或响应报文的信息。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTTP 协议设计成简单化。随着 Web 的不断发展,因无状态而导致业务处理变得棘手的情况增多了。比如,用户登录到一家购物网站,即使他跳转到该站的其他页面后,也需要能继续保持登录状态。为了实现管理状态,便引入了 Cookie 技术和 Session 机制。
Session 与 Cookie 的主要区别在于:Session 机制是在服务端保持用户状态,而 Cookie 机制是在客户端保持用户状态。由于采用服务端保持用户状态也需要在客户端保存一个 session 的标识,而这通常是 Cookie 机制实现的。这过程大致如下:
用户登录成功后,服务端将用户的登录状态保存在 session 中,同时将 sessionID 通过 cookie 返回至客户端。用户在之后的请求将带有 sessionID 的 cookie 发送至服务端,服务端通过 sessionID 取出 session,得到用户的登录状态。
A: 不是。session 是在服务端管理的,浏览器关闭时并不会主动去通知 Web 服务器,所以服务器无法得知浏览器何时关闭,更不会再浏览器关闭时去销毁 session。之所以有 “浏览器关闭后,session 会被销毁" 的错觉,是因为大部分的 Session 机制都使用会话 cookie 来保存 sessionID,而浏览器关闭时,这个 sessionID 便被删除,当再次向服务器发送请求时就无法找附带原来的 sessionID,服务器收到请求时也无法找到原来的 session。如果保存 sessionID 的 cookie 被保存在硬盘上,或者使用其他方法在客服端发送请求时,将原来的 sessionID 附上,那么服务器接收到请求时,仍然可以找到原来的 session。正是 HTTP 客户端的关闭不会导致 session 被销毁,服务器才为 session 设置了一个失效时间,当 session 被闲置的时间超过了失效时间,服务器便认为客户端已经停止了活动,将 session 销毁以节省内存资源。
Session 与 Cookie 的主要区别在于:Session 机制是在服务端保持用户状态,而 Cookie 机制是在客户端保持用户状态。由于采用服务端保持用户状态也需要在客户端保存一个 session 的标识,而这通常是 Cookie 机制实现的。这过程大致如下:
用户登录成功后,服务端将用户的登录状态保存在 session 中,同时将 sessionID 通过 cookie 返回至客户端。用户在之后的请求将带有 sessionID 的 cookie 发送至服务端,服务端通过 sessionID 取出 session,得到用户的登录状态。
会话劫持
既然通常是通过 cookie 来维持会话的,那么如果 cookie 被窃取,攻击者就可以劫持会话,合法地登录用户账户。Q & A
Q: 浏览器关闭后,session 就会被销毁吗?A: 不是。session 是在服务端管理的,浏览器关闭时并不会主动去通知 Web 服务器,所以服务器无法得知浏览器何时关闭,更不会再浏览器关闭时去销毁 session。之所以有 “浏览器关闭后,session 会被销毁" 的错觉,是因为大部分的 Session 机制都使用会话 cookie 来保存 sessionID,而浏览器关闭时,这个 sessionID 便被删除,当再次向服务器发送请求时就无法找附带原来的 sessionID,服务器收到请求时也无法找到原来的 session。如果保存 sessionID 的 cookie 被保存在硬盘上,或者使用其他方法在客服端发送请求时,将原来的 sessionID 附上,那么服务器接收到请求时,仍然可以找到原来的 session。正是 HTTP 客户端的关闭不会导致 session 被销毁,服务器才为 session 设置了一个失效时间,当 session 被闲置的时间超过了失效时间,服务器便认为客户端已经停止了活动,将 session 销毁以节省内存资源。
相关文章推荐
- Apache主配置文件httpd.conf 详解
- 最全的tcpdump使用详解
- HttpClientGetPost_MultiThreading_ResumeFromBreakPoint
- 使用ntopng,在Linux上搭建基于Web的网络流量监控系统
- HTTP详解(3)-http1.0 和http1.1 区别
- HTTP详解(1)-工作原理
- HTTP详解(2)-请求、响应、缓存
- Python实现HTTP-Basic认证登陆
- springmvc 实现http接口 接受json参数
- 使用GraphViz画caffe网络结构图
- Windows7如何实现笔记本电脑无线网络共享的详细图文教程
- 两大Http外交官HttpURLConnection和HttpClient(一)
- 机器学习中使用神经网络第三讲笔记
- 使用C#的HttpWebRequest模拟登陆网站
- 情感分析︱网络公开的免费文本语料训练数据集汇总
- http协议详解
- SOCKET API和TCP STATE的对应关系
- TCPClient为远程和本地设置端口和IP
- HTTP 响应头信息
- HTTP 响应头信息