四种会话跟踪方法

前段时间看到web中会话跟踪技术,经过收集并整理将学习结果记录在此。

1.什么是会话

客户端打开与服务器的连接发出请求到服务器响应客户端请求的全过程称之为会话 。

2.什么是会话跟踪

对同一个用户对服务器的连续的请求和接受响应的监视 。

3.为什么需要会话跟踪

浏览器与服务器之间的通信是通过HTTP协议进行通信的,而HTTP协议是”无状态”的协议,它不能保存客户的信息,即一次响应完成之后连接就断开了,下一次的请求需要重新连接,这样就需要判断是否是同一个用户,所以才应会话跟踪技术来实现这种要求

4.介绍

当服务器响应客户端的第一次请求时,将会创建一个新的session对象(该对象实现了HttpSession接口)和一个唯一的ID分配给该请求,以后 客户将此会话ID与请求一起传给服务器,此会话ID在后续的请求中会将用户与session对象进行匹配,用于识别不同的客户。

5.会话跟踪常用的方法:

① URL重写

URL(统一资源定位符)是Web上特定页面的地址,URL重写的技术就是在URL结尾添加一个附加数据以标识该会话,把会话ID通过URL的信息传递过去,以便在服务器端进行识别不同的用户 。

如果用户没有禁用cookie,而且又使用URL重写,则:用户在第一次访问EncodeURLServlet时,由于不知道用户是否禁用了 cookie,所以response.encodeURL()方法内部会将JSESSIONID重写在url上,但是一旦第二次访问时,由于用户是带着 cookie来的,所以response.encodeURL()不会将JSESSIONID重写在url上。

但是如果用户禁用cookie,则关闭了浏览器后,重新开启浏览器,则回话失效,无法实现回话跟踪;如果是用户没有禁用cookie,则可以通过设置装载JSESSIONID的cookie的失效时间来控制浏览器关闭后session仍未失效。

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         response.setCharacterEncoding("utf-8");
         response.setContentType("text/html;charset=utf-8");
         PrintWriter out = response.getWriter();
         request.getSession();  //创建session
         //调用response的encodeURL方法,将自动将JSESSION追加到url后面,如:url;jsessionid=BD111FFC653497E81B702A29B3AC6FE4
         String buyurl = response.encodeURL("/CookieAndSession/servlet/buy");
         String payurl = response.encodeURL("/CookieAndSession/servlet/pay");
         out.print("<a href=‘"+buyurl+"‘>购买</a><br/>");
         out.print("<a href=‘"+payurl+"‘>结账</a><br/>");
      }  

② 隐藏表单域

将会话ID添加到HTML表单元素中提交到服务器,此表单元素并不在客户端显示 。

③ Cookie

Cookie是Web服务器发送给客户端的一小段信息,客户端请求时可以读取该信息发送到服务器端,进而进行用户的识别。对于客户端的每次请求,服务器都会将Cookie发送到客户端,在客户端可以进行保存,以便下次使用。

客户端可以采用两种方式来保存这个Cookie对象,一种方式是保存在客户端内存中,称为临时Cookie,浏览器关闭后 这个Cookie对象将消失。另外一种方式是保存在 客户机的磁盘上,称为永久Cookie。以后客户端只要访问该网站,就会将这个Cookie再次发送到服务器上,前提是 这个Cookie在有效期内。这样就实现了对客户的跟踪。

Cookie是可以被禁止的。

//在服务器端获取Cookie
    Cookie[]cookies = request.getCookies();

for (int i = 0; cookies != null && i < cookies.length;i++) {
        Cookiecookie = cookies[i];

        System.put.println(cookie.getName());
  }
//在服务器端设置Cookie
   String username = "sa";
   Cookie usernameCookie = new Cookie("username", username);
   response.addCookie(usernameCookie);

如果maxAge为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效。maxAge为负数的Cookie,为临时性Cookie,不会被持久化,不会被写入到Cookie文件中。Cookie信息保存在浏览器内存中,因此关闭浏览器该Cookie就消失了。

Cookie默认的maxAge值为-1。

如果maxAge为0,则表示删除该Cookie。Cookie机制没有提供删除Cookie的方法,因此通过设置该Cookie即时失效实现删除Cookie的效果。失效的Cookie会被浏览器从Cookie文件或者内存中删除。

response对象提供的Cookie操作方法只有一个添加操作add(Cookie cookie)。要想修改Cookie只能使用一个同名的Cookie来覆盖原来的Cookie,达到修改的目的。删除时只需要把maxAge修改为0即可。

Cookie并不提供修改、删除操作。如果要修改某个Cookie,只需要新建一个同名的Cookie,并添加到response中覆盖原来的Cookie。

如果要删除某个Cookie,只需要新建一个同名的Cookie,并将maxAge设置为0,并添加到response中覆盖原来的Cookie。

④ Session

每一个用户都有一个不同的session,各个用户之间是不能共享的,是每个用户所独享的,在session中可以存放信息。在服务器端会创建一个session对象,产生一个sessionID来标识这个session对象,然后将这个sessionID放入到Cookie中发送到客户端,下一次访问时,sessionID会发送到服务器,在服务器端进行识别不同的用户。Session是依赖Cookie的,如果Cookie被禁用,那么session也将失效。因为Session是用Session ID来确定当前对话所对应的服务器Session,而Session ID是通过Cookie来传递的,禁用Cookie相当于失去了Session ID,也就得不到Session了。此时可以考虑URL重写和表单隐藏域。

原理:在后台,系统从cookie或者url中提取用户ID,这些动作对程序员是透明的,你只需调用getSession,

如果在输入的cookie和url中找不到会话ID,系统会创建一个新的空会话。如果使用的是cookie(默认),系统还会创建一个名为

JSESSIONID的输出cookie,在其中存储一个唯一的值表示会话ID。(在服务器端读取的时候就是通过这个来识别Session的)

如果不存在会话的时候不想创建新的会话,可以使用HttpSession session = request.getSession(false);,如果不存在session对象就得到一个null值,并不创建空的session对象。

removeAttribute(“key”)  废弃与指定键关联的值

invalidate删除整个会话(在当前web应用中)

logout将用户从web服务器中注销,并删除所有属于他的会

HttpSession session = request.getSession();

设置session的空闲失效时间有两种方式:

1.在web.xml中设置:

   <session-config>
      <session-timeout>2</session-timeout>
   </session-config>  

2.设置session的maxInactiveInterval属性,(session的 默认空闲失效时间为30分钟,即30分钟内不访问服务器,session将自动销毁)如下:

session.setMaxInactiveInterval(2*60);

也可以通过 session.invalidate();销毁session。

时间: 2024-10-12 14:44:58

四种会话跟踪方法的相关文章

四种会话跟踪技术,JSP的四种范围

这两个问题在网上搜答案是一样的,但是我的宝典里标明这是两个问题,有不同的答案,所以在这里注释一下. 四种会话跟踪技术 cookie,url重写,session,隐藏域 Cookie:服务器在一个应答首部传递给浏览器的名称/值对.浏览器保存的时间由cookie的过期时间属性来指定.当浏览器向某个服务器发送一个请求时,它会检查其保存的cookie,并在请求首部中包含从同一台服务器上接收到的所有cookie. 首次都是通过URL传递的,即在URL后跟一个ID标识.然后会判断客户端是否接受cookie,

四种会话跟踪技术

会话跟踪是一种灵活.轻便的机制,它使Web上的状态编程变为可能.HTTP是一种无状态协议,每当用户发出请求时,服务器就会做出响应,客户端与服务器之间的联系是离散的.非连续的.当用户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户,会话跟踪技术就可以解决这个问题.当一个客户在多个页面间切换时,服务器会保存该用户的信息.有四种方法可以实现会话跟踪技术:URL重写.隐藏表单域.Cookie.Session. 1).隐藏表单域:<input type="hidden">

产品经理常用的四种需求收集方法简述

A 客户访谈 客户访谈是通过面对面的交流方式了解具体客户对产品.对流程的需求.观点和看法. 客户访谈的内容可以包括: 1.了解哪些需求对客户比较重要. 2.就了解到的一些需求请客户协助进行优先排序. 3.就问题改进建议的初步想法与客户进行讨论,确认是否能够满足客户需求. 客户访谈的优点包括: 1.由于是面对面的交流,因此在调查内容上更加灵活,可以随时根据问答状况就一些内容进行深入讨论,获得更多的客户感受. 2.客户可以再调查人的协助下,进行一些较为复杂的问卷调查. 3.客户访谈方式的适用面广,可

四种数据保持方法

IOS 四种保存数据的方式 (2013-04-02 15:04:53) 转载▼ 在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题.将数据保存到本地,能够让程序的运行更加 流畅,不会出现让人厌恶的菊花形状,使得用户体验更好.下面介绍?一下数据保存的方式: 1.NSKeyedArchiver:采用归档的形式来保存数据,该数据对象需要遵守NSCoding协议,并且该对象对应的类必须提 供encodeWithCoder:和initWithCoder:方法.前?一个方法告诉系统怎么对对象进行编

笔试算法题(53):四种基本排序方法的性能特征(Selection,Insertion,Bubble,Shell)

四种基本算法概述: 基本排序:选择,插入,冒泡,希尔.上述算法适用于小规模文件和特殊文件的排序,并不适合大规模随机排序的文件.前三种算法的执行时间与N2成正比,希尔算法的执行时间与N3/2(或更快)成正比: 前三种算法在平均,最坏情况下都是N2,而且都不需要额外的内存:所以尽管他们的运行时间只相差常数倍,但运行方式不同: 对于已经就序的序列而言,插入排序和冒泡排序的运行时间都是O(N),但是选择排序的时间仍旧是O(N^2): 因为Insertion和Bubble都是相邻项间的比较交换,所以不会出

iOS中常用的四种数据持久化方法简介

iOS中常用的四种数据持久化方法简介 iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 [NSUserDefaults standardUserDefaults]就够用了 @interface User : NSObject <NSCoding>@property (nonatomic, assign) NSInteger userID;@property (nonatomic,

Scrapy里Selectors 四种基础的方法

在Scrapy里面,Selectors 有四种基础的方法xpath():返回一系列的selectors,每一个select表示一个xpath参数表达式选择的节点css():返回一系列的selectors,每一个select表示一个css参数表达式选择的节点extract():返回一个unicode字符串,为选中的数据re():返回一串一个unicode字符串,为使用正则表达式抓取出来的内容 /html/head/title: 选择HTML文档<head>元素下面的<title> 标

四种垂直居中的方法

四种垂直居中的方法 显示效果:       代码: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8" /> 5 <title>四种垂直居中的方法</title> 6 </head> 7 <body> 8 <h1>方法一:</h1> 9 <div style="width:200px;

Web开发中,用到的4种会话跟踪技术

会话跟踪:主要解决HTTP的无状态问题,即: 当用户发出请求时,服务器就会做出响应,客户端与服务器之间的联系是离散的.非连续的.当用户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户,会话跟踪技术就可以解决这个问题.当一个客户在多个页面间切换时,服务器会保存该用户的信息. 1.Cookie: 可以使用 cookie 存储购物会话的 ID:在后续连接中,取出当前的会话 ID,并使用这个 ID 从服务器上的查找表(lookup table)中提取出会话的相关信息. 以这种方式使用 coo