`
feixingfei
  • 浏览: 45607 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论
  • calosteward: 感谢分享,我还找到了另一个也是可以用于c#的代码,是一个英文网 ...
    PDF合并

Servlet的会话管理机制

 
阅读更多

一、Servlet的会话管理机制

根据设计,HTTP是一种无状态的协议。它意味着Web应用并不了解有关同一用户以前请求的信息。维持会话状态信息的方法之一是使用Servlet 或者JSP容器提供的会话跟踪功能。Servlet API规范定义了一个简单的HttpSession接口,通过它我们可以方便地实现会话跟踪。

HttpSession接口提供了存储和返回标准会话属性的方法。标准会话属性如会话标识符、应用数据等,都以“名字-值”对的形式保存。简而言 之,HttpSession接口提供了一种把对象保存到内存、在同一用户的后继请求中提取这些对象的标准办法。在会话中保存数据的方法是 setAttribute(String s, Object o),从会话提取原来所保存对象的方法是getAttribute(String s)。

在HTTP协议中,当用户不再活动时不存在显式的终止信号。由于这个原因,我们不知道用户是否还要再次返回,如果不采取某种方法解决这个问题,内存中会积累起大量的HttpSession对象。

为此,Servlet采用“超时限制”的办法来判断用户是否还在访问:如果某个用户在一定的时间之内没有发出后继请求,则该用户的会话被作废,他的 HttpSession对象被释放。会话的默认超时间隔由Servlet容器定义。这个值可以通过getMaxInactiveInterval方法获 得,通过setMaxInactiveInterval方法修改,这些方法中的超时时间以秒计。如果会话的超时时间值设置成-1,则会话永不超时。 Servlet可以通过getLastAccessedTime方法获得当前请求之前的最后一次访问时间。

要获得HttpSession对象,我们可以调用HttpServletRequest对象的getSession方法。为了正确地维持会话状态,我们必须在发送任何应答内容之前调用getSession方法。

用户会话既可以用手工方法作废,也可以自动作废。作废会话意味着从内存中删除HttpSession对象以及它的数据。例如,如果一定时间之内(默认30分钟)用户不再发送请求,Java Web Server自动地作废他的会话。

Servlet/JSP会话跟踪机制有着一定的局限,比如:

会话对象保存在内存之中,占用了可观的资源。

会话跟踪依赖于Cookie。由于各种原因,特别是安全上的原因,一些用户关闭了Cookie。

会话跟踪要用到服务器创建的会话标识符。在多个Web服务器以及多个JVM的环境中,Web服务器不能识别其他服务器创建的会话标识符,会话跟踪机制无法发挥作用。

要深入理解会话跟踪机制,首先我们必须理解在Servlet/JSP容器中会话如何运作。

二、会话标识符

每当新用户请求一个使用了HttpSession对象的JSP页面,JSP容器除了发回应答页面之外,它还要向浏览器发送一个特殊的数字。这个特殊 的数字称为“会话标识符”,它是一个唯一的用户标识符。此后,HttpSession对象就驻留在内存之中,等待同一用户返回时再次调用它的方法。

在客户端,浏览器保存会话标识符,并在每一个后继请求中把这个会话标识符发送给服务器。会话标识符告诉JSP容器当前请求不是用户发出的第一个请 求,服务器以前已经为该用户创建了HttpSession对象。此时,JSP容器不再为用户创建新的HttpSession对象,而是寻找具有相同会话标 识符的HttpSession对象,然后建立该HttpSession对象和当前请求的关联。

会话标识符以Cookie的形式在服务器和浏览器之间传送。如果浏览器不支持Cookie又如何呢此时,对服务器的后继请求将不会带有会话标识符。 结果,JSP容器认为该请求来自一个新用户,它会再创建一个HttpSession对象,而以前创建的HttpSession对象仍旧驻留在内存中,但该 用户以前的会话信息却丢失了。

另外,Servlet/JSP容器只认可它自己创建的会话标识符。如果同一Web应用在“Web农场”(Web farm)的多台服务器上运行,则必须存在这样一种机制:保证来自同一用户的请求总是被定向到处理该用户第一次请求的服务器。

分享到:
评论

相关推荐

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

    ### 深入理解和改进 JSP Servlet 会话管理机制 #### 一、引言 在Web应用开发中,会话管理是确保用户状态和数据安全传输的关键技术之一。由于HTTP协议本身是一种无状态的协议,因此对于需要维护用户状态的应用而言...

    Servlet会话机制(cookie and session)

    Servlet会话机制是Web开发中的核心概念,它允许服务器在客户端之间保持状态,尤其是在无状态的HTTP协议下。本文将深入探讨Cookie和Session两种主要的会话管理方式,并结合一个名为"ShoppingCar"的示例来阐述它们在...

    Servlet会话管理与用户认证.doc

    Servlet会话管理和用户认证是Web开发中的核心概念,特别是在基于Java的服务器端编程中。Servlet技术提供了多种方式来处理用户的身份验证和跟踪用户的行为。在文档"Servlet会话管理与用户认证.doc"中,主要讨论了两个...

    servlet用户管理系统

    6. **会话管理**:为了保持用户会话,Servlet会利用HTTP协议中的session机制。当用户登录后,会话ID会被保存在客户端的cookie中,每次请求时,Servlet都会检查这个ID以确认用户身份。 7. **MVC模式**:尽管描述中...

    Servlet会话技术基础解析

    Servlet 会话技术基础解析是指在 Web 应用程序中,服务器端和客户端之间的会话管理机制。它允许服务器端存储和检索与用户相关的信息,以便于提供个性化服务和追踪用户行为。本文将从 Servlet 会话技术的基础入手,...

    java-servlet物流管理-成功.zip

    综上所述,"java-servlet物流管理-成功.zip"文件中的内容可能涵盖了一系列Java Servlet相关的开发和实现细节,包括Servlet的基本使用、HTTP请求处理、MVC架构、数据库交互、会话管理以及系统安全性和性能优化等多个...

    基于servlet 的考勤管理系统

    5. **会话管理**:考勤管理系统可能涉及到用户登录状态的维护,这通常需要用到`HttpSession`对象,存储用户的登录信息,以便在多个请求之间保持会话状态。 6. **JSP(JavaServer Pages)**:在实际项目中,为了更好...

    Java Servlet Programming

    第5章:会话管理,详细介绍了Servlet的会话管理机制,包括HttpSession和Cookie。 第6章:安全机制,详细介绍了Servlet的安全机制,包括身份验证和授权。 第7章:多线程编程,详细介绍了Java多线程编程的基础知识和...

    jsp+servlet人事管理系统

    4. **会话管理**:在人事管理系统中,可能会用到会话跟踪,比如用户登录后,通过`HttpSession`对象来保持用户的登录状态,以便在不同页面间共享信息。 5. **转发与重定向**:在处理完请求后,Servlet可能会使用`...

    Servlet管理系统

    当用户再次访问网站时,浏览器会自动发送该Cookie,服务器可以通过检查Cookie来识别已登录的用户,从而实现会话管理。 翻页功能在大型数据展示中十分常见,"Servlet管理系统"可能通过Servlet来处理分页请求。在...

    我收集的servlet中事件监听器机制we吧xml配置详解

    事件监听器机制在Servlet中扮演着重要角色,它允许程序员对特定的事件进行响应,例如请求到达、会话创建或销毁等。监听器通过实现Java Servlet API提供的特定接口来注册对这些事件的兴趣。以下是一些主要的监听器...

    servlet用户管理界面(Oracle数据库)

    总的来说,"Servlet用户管理界面(Oracle数据库)"项目涉及到的主要知识点包括:Servlet的生命周期和请求处理机制,JDBC与Oracle数据库的交互,以及用户身份验证和会话管理。这些都是Java Web开发中的基础技能,对于...

    JSP+servlet的后台管理系统

    在JSP+Servlet的实现中,Servlet负责处理用户的登录请求,验证凭证,如果验证成功,将用户信息保存在会话(session)中。随后,Servlet根据用户的操作请求,调用业务逻辑,如查询数据库,更新数据等。最后,Servlet...

    Servlet状态管理总结和源码

    Servlet状态管理是Web开发中的重要概念,主要用于保持用户在不同请求之间的一致性状态。在HTTP协议中,由于其无状态特性,服务器无法自动识别多次请求来自同一个客户端,因此需要额外的技术来跟踪用户状态。本篇文章...

    jsp+servlet完成宿舍管理系统

    2. 会话管理:对于需要用户登录的系统,我们需要使用HttpSession对象来跟踪用户的登录状态。 3. 错误处理:为防止程序出错,应设定异常处理机制,确保程序的健壮性。 4. 安全性:对敏感数据如密码进行加密处理,防止...

    session会话管理

    Session 会话管理是指在 Web 应用程序中管理用户会话的机制。Session 是一种服务器端的存储机制,用于存储用户的会话信息。Session 管理包括 Session 的创建、读取、更新和删除等操作。 Session 的原理 Session 是...

    jsp servlet实现 学生管理系统.zip

    8. **会话管理**: 为了跟踪用户的登录状态,项目可能会使用HTTP会话,通过`session.setAttribute()`和`session.getAttribute()`存储和获取用户信息。 9. **部署与运行**: 该应用需要在支持Servlet和JSP的Web服务器...

    JSP+Servlet人事管理系统

    这个项目为学习者提供了实际应用JSP和Servlet的机会,有助于理解和掌握Web开发中的请求处理、数据持久化、页面跳转、会话管理等核心概念。同时,通过实际操作,还能锻炼到问题排查、代码调试等实战技能,对于提升...

Global site tag (gtag.js) - Google Analytics