Featured image of post 了解 web session 机制

了解 web session 机制

session 简介

这个要先从 HTTP 说起,HTTP(Hyper Text Transfer Protocol)协议,这个协议是一个基于 TCP/IP 通信协议来传递数据超文本传输协议。

HTTP 本身没有状态,每一次的请求之间都是独立的,一次的数据请求就是一次周期。

Client -> Server 发出请求
Client <- Server 响应请求

然而大家也能看出来这其中的不足。

举个栗子:
我到一饭店吃饭,告诉服务员我要吃饺子,然后服务员给我送来一份饺子。我吃完之又叫服务员,这时来了个新的服务员,结果服务员过来之后,问我“客人要吃什么”。

显然…. 这家店要亏钱。

所以我们需要一种东西,可以把前后(上下文)连系起来,因此 session 诞生了。

session:会话。

中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个 session。有时候我们可以看到这样的话“在一个浏览器会话期间,…”,这里的会话一词用的就是其本义,是指从一个浏览器窗口打开到关闭这个期间 ①。最混乱的是“用户(客户端)在一次会话期间”这样一句话,它可能指用户的一系列动作(一般情况下是同某个具体目的相关的一系列动作,比如从登录到选购商品到结账登出这样一个网上购物的过程,有时候也被称为一个 transaction),然而有时候也可能仅仅是指一次连接,也有可能是指含义 ①,其中的差别只能靠上下文来推断 ②。

session 是对 HTTP 无法关联各个请求之间的连系所提供的解决方案。

那具体是怎么解决的呢?

session 机制

session 主要作用与服务端,在服务端设置一个标识比如 session, 客户端也要有一个标识比如 sessionId,每次请求都发送给服务端。当客房端发送一个请求时,携带 sessionId 到服务端。 服务端用这个 id 来找到对应的 session 信息从而识别出用户

再举个栗子:
就还拿上面吃饺子来看, 我吃完饺子叫服务员,服务员一看我桌子上有碗,这下他就不会问我“客人要吃什么”了,而会问“客人卖单吗?”,同时也会根据碗的大小等信息计算出价格。

哎呀,不会亏钱了。 :trollface:

使用方法

  1. 使用 Cookie:使用 Cookie 来保存 session id,浏览器可以通过这种方式按照规则把这个标识发送给服务器。 (session cookie)

  2. URL 重写:由于 Cookie 是可以被禁用的,所以还需要有其它的替代方案来解决 Cookie 被禁用时向服务器传递 session id。

chrome 关闭 cookie 方法

URL 重写技术,利用这个把 session id 附加到 URL 路径后,可以作为参数,也可以用作为路径附加信息,还可以作为路径的一部分。

参数: abc.com/SessionTest/post?sessionId=AfslfjafFSFlkbadl….

路径信息: abc.com/SessionTest/post;sessionId=AfslfjafFSFlkbadl….

路径的一部分: abc.com/SessionTest/post/AfslfjafFSFlkbadl….

使用这种方式的时候还需要注意一点:http get 请求时 URL 长度限制问题,各个浏览器都不相同视情况而定。(一般是不会有超过限制的情况。

几种方式对与客户端没什么区别,只是在服务端的处理方式不同。这样的实现方式与 Cookie 相同,都必须在每次请求都将信息传绘服务器。所以,每次请求都要将 session id 附加到 URL 路径后。

生命周期

会话,很多人说到时都会说“只要关闭浏览器,session 就消失了”。实际上 session 不会消失,对 session 来说除非程序通知服务器要删除这个 session,否则服务器会一真保留。请务必给 session 配置过期时间,用这个时候来判断是否要删除这个 session,删除 session 之后,即为一个生命周期。

后言

文章周期完。

以上是自己看资料整理,如果有什么问题还请各位留言指出。 :yum:

感谢此文对我的帮助 http://justsee.iteye.com/blog/1570652