`
liuzejian4
  • 浏览: 58171 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

会话跟踪技术:会话Cookie,URL重写和HttpSession

 
阅读更多

一,会话跟踪(session tracking)技术
会话是客户端发送请求,服务器返回响应的连接时间段。
HTTP是无状态协议:每次都是单独连接,不能维持客户的上下文信息。
会话跟踪技术是用于维持客户端和服务器端通信信息的技术。

三种典型客户端会话跟踪解决方案:
  1,Cookie;
  2,URL重写;
  3,隐藏表单域;
二,会话Cookie
用于会话跟踪的Cookie叫做会话Cookie。Servlet规范中会话跟踪的cookie名字必须是JSESSIONID,保存在浏览器的内存中。区别于保存在外部存储设备的cookie。
对于存储在内存中的cookie,是不能被不同的浏览器进程共享,共享只能发生在同一个浏览器进程的不同窗口(对个窗口共享一个进程)中。对于存储在外部设备的cookie,可以多浏览器共享。

三,url重写
在浏览器不支持或禁用cookie的情况下,使用url重写代替cookie来跟踪用户会话。
每个页面都必须使用servlet或jsp动态生成(动态页面)。因为附加在URL上的sessionID是动态产生,所以对于静态页面的跳转,URL重写机制无能为力。
即使使用动态页面,如果用户离开了会话并且通过书签或链接再次回来,会话信息也会丢失,因为存储下来的链接含有错误的标识信息。

必须将所有发送到客户端的url进行编码,调用HttpServletResponse接口中的encodeURL()方法和encodeRedirectURL()方法来实现。在调用sendRedirect()方法之前使用encodeRedirectURL()方法.

四,隐藏表单域
只能用于特定操作中。仅当每个页面都由表单提交而动态生成的时候,才可以使用隐藏表单域,用来存储相关会话信息。
五,servlet中的会话跟踪
javax.servlet.http.HttpSession接口是servlet提供会话跟踪解决方案。
HttpSession对象存放在服务器端,只是对cookie和url重写技术的封装应用,所以要求服务器支持cookie,可以全局切换到url重写。
1,访问与当前请求相关联的会话对象:getSession(boolean value)方法
  在会话过程中,web容器负责为客户端维护一个唯一的HttpSession对象。
  对于新会话,web容器创建使用实现了HttpSession接口的HttpSession对象封装当前请求会话的信息(散列表的方式存储)。
 
  使用HttpServletRequest的getSession()方法访问HttpSession对象。
   在后台,系统从cookie或URL重写附加的数据中提取出用户ID。以ID为key,遍历之前创建的HttpSession对象内建的散列表。
   如果找不到匹配的会话ID,系统重新创建一个新的会话。默认情况下(不禁用Cookie)还会创建一个名为JSESSIONID,值为唯一标识用户表示会话ID的输出cookie。 
  因为调用getSession()方法会影响到后面的响应,所以只能在发送任何文档内容到客户端之前调用getSession()方法。
  区别:getSession(boolean value)方法:如果系统没有找到与请求关联的会话ID,true表示返回新会话。false表示方法返回null。
2,访问和设置与会话相关联信息,维护会话的状态:HttpSession的getAttribute()方法和setAttribute()方法
  散列表:HttpSession对象内建数据结构,用于存储 当前请求会话的数据(会话的属性)。可以存储任意数量的key-value对。
  使用HttpSession的getAttribute()方法和setAttribute(String key,Object value)方法读取和设置当前请求会话数据(即对散列表的操作),维护会话的状态。
  setAttribute方法会替换任何之前的属性。如果不想被替换,则需要在设置之前使用removeArrtibute(String key)方法移除该属性。
 
  setAttribute方法会触发所有实现了HttpSessionBindingListener接口的valueBound方法,做一些初始化状态的操作。
  removeArrtibute方法会触发所有实现了HttpSessionBindingListener接口的valueUnbound方法,做一些消除状态的操作。
  对于分布式WEB应用程序,将web应用程序标记为可分布式执行,系统需要能够将会话对象在机器之间传递,这时需要将会话的属性实现Serializable接口。
3,废弃会话数据
  只移除自己编写的的servlet创建的数据:removeArrtibute(String key)方法
  (web应用程序中删除)删除整个会话:invalidate()方法,可以用该方法注销用户。
  (Web服务器中删除)将用户从系统中注销并且删除所有与该会话关联的会话:logout()方法。一定要与其他web应用程序协调loggout命令的使用。
 
4,会话超时时间间隔
  getMaxInactiveInterval()方法和setMaxInactiveInterval()方法读取和设置在没有访问的情况下,会话保存的最长时间。秒为单位。负数表示会话从不超时。超时由服务器来维护。
5,会话最后次被客户端访问的时间:getLastAccessedTime()方法
  可以用来确定客户端在二次请求之间会话的非活动时间。
6,获取会话被创建的时间:getCreationTime()方法 返回long类型数据
7,返回分配给session的唯一标识ID,为字符串。getId()方法
六,浏览器会话与服务器会话
浏览器会话
  默认情况下,会话跟踪基于存储在浏览器内存中的cookie,区别于存储在外围存储设备上的cookie。
  需要servlet显示的读取JSESSION cookie,设置最大时效和路径并添加到客户端,否则退出浏览器就会中断会话。
服务器会话
  服务器需要将会话保存在内存中,在会话处于非活动状态超过设定的间隔(会话超时)就移除会话。
七,对绑定到session中的对象(属性)初始化和消除状态。HttpSessionBindingListener监听器接口和HttpSessionBindingEvent事件类。
Servlet容器通过实现HttpSessionBindingListener监听器接口的监听器来监听HttpSessionBindingEvent事件。

HttpSessionBindingListener监听器接口方法:
1,valueBound(HttpSessionBindingEvent event):对象被绑定到session中时该方法通知对象。做初始化操作。
2,valueUnbound(HttpSessionBindingEvent event): 对象被移除出session时该方法通知对象。做消除状态操作。

HttpSessionBindingEvent事件方法:
1,getName():获取触发事件的属性的名字。
2,getValue():获取触发事件的属性的值。
3,getSession():返回Session对象。

八,在 Java Servlet API中有关的监听器接口。
与Session相关的监听器接口
javax.servlet.http.HttpSessionActivationListener:如果绑定到Session中,当Session被钝化或激活时,Servlet容器将通知该对象。
javax.servlet.http.HttpSessionAttributeListener:如果想要在Session中的属性列表发生改变时得到通知,可以实现这个接口。
javax.servlet.http.HttpSessionListener:如果需要在Session创建后或者Session无效前得到通知,可以实现这个接口,实现该接口的类必须在web应用程序的部署描述符中进行配置。

与Servlet上下文有关的监听器接口:
javax.servlet.ServletContextAttributeListener:在Servlet上下文中的属性列表发生改变时得到通知,可以实现这个接口,实现该接口的类必须在web应用程序的部署描述符中进行配置。
javax.servlet.ServletContextListener:如果需要在Servlet上下文对象初始化时或被销毁的时候得到通知,可以实现这个接口,实现该接口的类必须在web应用程序的部署描述符中进行配置。
与请求相关的监听器接口:servlet2.4规范定义
javax.servlet.ServletRequestAttributeListener:Servlet请求对象中的属性发生改变时得到通知。
javax.servlet.ServletRequestListener:请求对象初始化或者被销毁时得到通知。

 

分享到:
评论

相关推荐

    会话跟踪技术及其应用1

    传统的会话跟踪技术主要包括Cookie、URL重写和隐藏表单字段。 Cookie技术是最常见的会话跟踪手段。它由Web服务器在用户首次访问时发送到用户的浏览器,通常包含一个或多个键值对,存储用户的相关信息,如购物车内容...

    基于Servlet的会话跟踪理解会话跟踪原理

    每种技术都有其优缺点,比如隐藏表单域和URL重写可能会暴露敏感信息,而Cookie可能被禁用或者被客户端篡改。 总之,基于Servlet的会话跟踪是通过HttpSession对象实现的,它使得服务器能够在无状态的HTTP协议之上...

    JSP中会话跟踪的操作

    2. **URL重写**:若Cookie不可用或受限,服务器可以在URL中附加会话ID,用户每次访问新的页面时,会话ID通过URL传递回服务器。 3. **隐藏表单字段**:类似于URL重写,但通过在HTML表单中添加一个隐藏的输入字段来...

    JavaWeb会话跟踪技术

    除了Cookie和Session,还有其他一些会话跟踪技术。例如,URL重写,即在URL后面附加Session ID,以保持会话状态。这种方法适用于Cookie被禁用的情况,但会使URL变得冗长,不便于用户书签和分享。另外,隐藏表单字段也...

    第5章 会话跟踪.rar

    同时,还可以学习如何结合其他会话跟踪方法,如Cookie和URL重写,来增强应用的功能和用户体验。 在Java JSP中,会话跟踪经常与EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)结合使用...

    给予servelet的会话跟踪的PPT

    **Servlet的会话跟踪技术详解** ...在Servlet应用中,会话跟踪是实现用户...通过理解并熟练运用Cookie、URL重写和隐藏表单字段等方法,以及Servlet API,开发者可以有效地管理用户会话,提高Web应用的功能性和用户体验。

    第五章:会话及会话技术chapter05

    5. **会话跟踪**:除了使用cookie,还可以通过URL重写方式跟踪会话,即在URL后面附加会话ID。这种方法适用于禁用cookie的浏览器。 6. **会话范围内的通信**:在大型应用中,有时需要在多个请求间共享数据,但又不...

    java web整合开发王者归来光盘代码-第五章 会话跟踪

    本资源"第五章 会话跟踪"可能包含了使用这些技术的实际示例,如创建和管理HttpSession,处理Cookie,以及在Struts或Spring框架中如何集成会话跟踪。学习这些内容可以帮助开发者在实际项目中更有效地处理用户会话,...

    会话跟踪技术

    会话跟踪技术在Java Web开发中尤为重要,通常涉及到的技术包括Cookie和HttpSession。 #### 二、使用Cookie进行会话跟踪 ##### 2.1 Cookie简介 Cookie是一种简单的跟踪机制,它通过在客户端浏览器中存储小块数据来...

    jsp会话跟踪ppt

    会话的工作原理是,服务器为每个客户端分配一个唯一的会话ID,并将其通过Cookie或URL重写等方式返回给客户端。然后,客户端在后续的每次请求中都携带这个会话ID,使得服务器能够识别并恢复之前保存的客户端状态。 *...

    java_web_第4章_会话跟踪.ppt

    会话跟踪 4.1 会话管理 4.2 通过Cookie支持会话 4.3 URL重写与隐藏表单域 4.1.1 理解状态与会话 4.1.2 会话管理机制 4.1.3 HttpSession接口 4.1.4 使用HttpSession对象 4.1.5 会话超时与结束

    深入理解和改进 jsp servlet会话管理机制

    - **多种跟踪方式结合**:结合Cookie和URL重写等方法,提高会话跟踪的可靠性。 - **会话复制**:在集群环境中,可以采用会话复制的方式,将同一个会话的信息同步到集群中的所有服务器上。 - **定期清理无效会话**:...

    08-Session-Tracking-Chinese.pdf

    ### 会话跟踪技术详解 ...本文详细介绍了使用Cookie、URL重写和隐藏表单域三种常见的会话跟踪方法,并重点讨论了Java中实现会话跟踪的具体实现方式。开发者可以根据应用场景选择最适合的会话跟踪方案。

    第12章 会话控制

    2. **URL重写**: 如果担心cookie被禁用或不安全,可以将会话ID附加到URL中。但这可能导致链接的可见性增加,对SEO不友好。 3. **隐藏表单字段**: 在HTML表单中添加一个隐藏字段来传递会话ID,适用于表单提交场景。 ...

    2. 20181218-会话管理1

    为了克服这个问题,开发者采取了几种会话跟踪技术,包括URL重写、隐藏域、Cookies以及HttpSession。下面我们将详细探讨这些技术。 首先,URL重写是一种简单但有限制的方法。它通过在URL中添加key-value对来存储信息...

    javaservlet的一些内容

    7. **会话级cookie vs URL重写**:在没有Cookie支持或考虑到安全性的情况下,服务器可以使用URL重写来跟踪会话。通过在URL后面附加会话ID,服务器可以在不依赖Cookie的情况下识别会话。 8. **会话劫持与固定会话ID*...

    jsp 会话追踪

    总之,JSP会话追踪是实现Web应用状态管理的核心技术,它通过HttpSession接口提供了一种便捷的方式来跟踪和存储用户状态,从而提升用户体验。正确理解和使用会话追踪能有效优化Web应用的功能和性能。

    如何在ASP和ASP.NET中共享会话状态

    这个过程涉及到的技术包括:会话管理、Cookie的使用、SQL Server数据库操作、***和ASP页面生命周期的理解以及网络编程。在开发过程中,开发者需要密切注意数据类型的一致性,以及确保安全地存储和传输会话数据,避免...

Global site tag (gtag.js) - Google Analytics