4种会话追踪方式

来源:互联网 发布:诺基亚s60软件下载 编辑:程序博客网 时间:2024/05/11 16:00

会话追踪主要应用于网络通信方面,主要是让服务器端识别客户端,这样在同一个客户端提交数据的时候,服务器对其有一定的分辨能力,从而避免数据的混乱。

一、网络通信协议分类:

1.   有状态的协议: TCP/IP  ,自从客户端与服务器连接上以后,这个连接会一直保持畅通! 持续保持连接状态。

比如:打电话,从双方接通开始,一直到任何一方挂断电话位置,期间一直保持畅通。

2.   无状态的协议:HTTP, 这是一种请求/响应模式的协议,当浏览器发起请求那一刻,与服务器建立了连接,当服务器给客户端浏览器做出响应以后,连接就中断!

比如:今天打开163首页,看到一些新闻:“热死了”, 这个网页隔着不动,过一个礼拜,再来看,新闻没有变!

区别:

 1、有状态的连接协议,服务器知道客户端是谁,无状态的连接协议,服务器不知道客户端是谁。

 2、由于http连接协议是无状态的,所以服务器不能辨别出,接收的多次请求,是来自同一个客户端,还是不同的客户端。

二、会话追踪分类

为了在无状态的连接协议之下,让web服务器能够分清楚哪些请求来自于哪些客户端,需要使用以下4种会话追踪方式:

1、Cookie


一个会话范围中,客户端第一次请求服务器时,没有记号,所以服务器生成一个记号,发送给浏览器,浏览器第二次、第三次、…第n次请求时,都会带着记号的。起始,这个记号也就是用来记录会话id的cookie总是服务器自动创建,发送给浏览器,自己也留一份对应一个Map. 客户端也会自动在下次请求时把记录的会话id的cookie发送给服务器。这个记录了会话id的cookie,生命周期与会话“同生共死”。

我们也可以额外手动添加一个Cookie给客户端

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><h1>a.jsp</h1><%//创建cookieCookie ck = new Cookie("a","1214");//设置存活时间ck.setMaxAge(10);//使用response添加cookieresponse.addCookie(ck);//cookie数据的传递,第一次都是从服务器往客户端发送,以后访问,//自己设置的cookie只要没有超过存活时间,就会往服务器发送,//而服务器设置的cookie只要会话没有结束,只会在第一次的时候服务器客户端发,//之后都是客户端给服务器发  %>
Cookie一般要完成的任务:

(1)存放用户的偏好设置:文字的大小、背景的颜色..

(2)购物车技术中需要使用Cookie

2、url重写

因为客户端浏览器可以禁用cookie! 这样就会导致:

(1) 在一次新会话中,一个客户端第一次向服务器发起请求时,没有带sessionid这个记号,所以服务器会发一个记号给客户端。

(2)由于客户端禁用了cookie,所以就算服务器发送记号给客户端了,客户端也不接受,不存盘。

(3)当客户端在同一次会话中再次请求服务器时,也就不会再带着记号了!服务器还以为这次请求是另外一个新会话呢!继续发记号。

最终导致,服务器无法追踪会话了,分不清那些请求来自于哪些客户端了。

因此我们可以使用另一种技术:重写url,也就是服务器把生成的记号,加载每一个超链接的后面,这个技术的缺陷在于,中间不能掉链子,一旦有一个页面没有重写,那么这个记号就会消失

3、隐藏域

主要应用于form表单提交中input标签属性使用hidden隐藏

4、session

session更聪明, 如果cookie开着,就用cookie传递记号,如果session已经关闭了,就自动使用url重写!








原创粉丝点击