会话追踪--cookie/重写url/隐藏域/session

网络通信协议分类

1.有状态的协议:TCP/IP,自从客户端与服务器连接上以后,这个连接会一直保持畅通,持续保持连接状态。
比如:打电话,从双方接通开始,一直到任何一方挂断电话位置,期间一直保持畅通。

2.无状态的协议:HTTP,这是一种请求/响应模式的协议,当浏览器发起请求那一刻,与服务器建立了连接,当服务器给客户端浏览器做出响应后,连接就中断了。
比如:今天打开一个网页,看大一条新闻,这个网页放着不动,过一段时间来看,新闻没有变化。

注意:有状态的连接协议,服务器知道客户端是谁;无状态的连接协议,服务器不知道客户端是谁。为了在无状态的连接协议之下,让web服务器能偶分清楚哪些请求来自哪些客户端,需要使用以下四种会话追踪方式:
cookie url重写 隐藏域 session


1.cookie:

这里写图片描述

2.使用chrome浏览器的开发人员界面,来观察cookie的传送方向:

这里写图片描述

3.一个会话范围中,客户端第一次请求服务器时,没有记号,所以服务器生成一个记号,发送给客户端浏览器,浏览器第二次、第三次、…第n次请求时,都会带着记号。

4.用来记录会话id的cookie总是由服务器自动创建,不但发送给浏览器一份,服务器自己也会留一份对应一个map。客户端也会自动在下次请求时把记录的会话id的cookie发送给服务器。这个记录了会话id的cookie,生命周期与会话相同。

5.程序员也可以手动添加一个cookie给客户端,以下的cookie存放目录,是IE浏览器存放的目录:

这里写图片描述

6.cookie一般要完成的业务有:
(1)存放用户偏好设置:文字的颜色,背景的颜色……
(2)购物车技术要用到cookie

7.在浏览器的设置中可以禁用cookie,这样会导致:
(1)在一次新会话中,一个客户端第一次向服务器发起请求时,没有带jsessionid这个记号,所以服务器会发一个记号给客户端;
(2)由于客户端禁用了cookie,所以就算服务器发送记号给客户端了,客户端也不接受,不存盘
(3)当客户端在同一次会话中再次请求服务器时,也就不会再带着记号了,服务器还以为这次请求是另外一个新会话,继续发记号。
最终导致,服务器无法追踪会话,分不清那些请求来自于哪些客户端。
所以,才需要别的追踪方式。


url重写

当cookie被浏览器禁用后,我们就不能使用cookie技术来追踪会话。我们可以重写url,也就是服务器把生成的记号,加在每一个超链接的后面,中间那个不能掉链子。

用到的方法:response.encodeUrl(String url);

这里写图片描述


隐藏域

隐藏域是用来收集或发送信息的不可见元素,对于网页访问者来说,隐藏域是看不见的。当表单被提交时,隐藏域会将信息用设置时定义的名称和值发送到服务器上。

使用隐藏域:<input type="hidden" name="…" value="…">


session

如果cookie开着,就用cookie传递记号,如果禁用了cookie,就无法得到会话id,session也就不能用了,就自动使用url重写。

猜你喜欢

转载自blog.csdn.net/yangruxi/article/details/76262179