使用url重写实现Session跟踪
这是在浏览器不支持Cookie的情况下,servlet引入的一种补充的会话机制。当用户发出下一次请求时,如果请求消息中没有包含Cookie头字段,Servlet引擎则认为客户端不支持Cookie,他将依据请求url参数中的会话标识号来实施会话跟踪。这种方式要求响应消息中出现的超链接地址后面附带会话标识号参数,用户也必须通过超链接来提交后续的访问请求。
这种技术成为url重写,tomcat发送给客户端的会话标识号的Cookie名称为JSESSIONID。url重写就是将JSESSIONID关键字作为参数名和将会话标识号作为参数附加到URL后面。如果浏览器不支持Cookie或者关闭Cookie,就必须对所有可能被客户端访问的请求路径进行URL重写,如超链接,form表单的action属性和重定向的URL
HttpServletResponse接口定义了两个用于URL重写的方法:
encodeURL方法,用于超链接和form表单的action属性中设置的URL进行重写
encodeRedirectURL 方法 用于对传递给HttpServletResponse.sendRedirect方法的URL进行重写
他们根据请求消息中是否含有Cookie头字段来决定是否进行url重写。把URL作为参数传递给这两个方法,他们就能完成url重写,在url后面添加jsessionid参数及其值。可以关闭浏览器的Cookie,然后,进行实验,在网页源文件中查看URL后面是否有jsessionid参数及其值。
Session的持久化
客户端访问了某个能开启会话功能的资源, web服务器就会创建一个与该客户端对应的HttpSession对象,每个HttpSession对象都要站用一定的内存空间。如果在某一时间段内访问站点的用户很多,web服务器内存中就会积累大量的HttpSession对象,消耗大量的服务器内存,即使用户已经离开或者关闭了浏览器,web服务器仍要保留与之对应的HttpSession对象,在他们超时之前,一直占用web服务器内存资源。
web服务器通常将那些暂时不活动但为超时的HttpSession对象转移到文件系统或数据库中保存,服务器要使用他们时再将他们从文件系统或数据库中装载入内存,这种技术称为Session的持久化。
将HttpSession对象保存到文件系统或数据库中,需要采用序列化的方式将HttpSession对象中的每个属性对象保存到文件系统或数据库中;将HttpSession对象从文件系统或数据库中装载如内存时,需要采用反序列化的方式,恢复HttpSession对象中的每个属性对象。所以存储在HttpSession对象中的每个属性对象必须实现Serializable接口。
Session的持久化的作用:
1.提高服务器内存的利用率,保证那些暂停活动的客户端在会话超时之前继续原来的会话
2,在多台web服务器协同对外提供服务的集群系统中,使用Session的持久化技术,某台服务器可以将其中发生改变的Session对象复制给其他服务器。保证了在某台服务器停止工作后可以由其他服务器来接替它与客户端的会话
3,在一个web应用程序重启时,服务器也会持久化该应用程序中所有HttpSession对象,保证客户端的会话活动仍可以继续。
Tomcat使用Session Manager 类来管理Session的持久化,他提供了两个SessionManager类
org.apache.catalina.session.StandardManager
org.apache.catalina.session.PersistentManager
StandardManager是tomcat默认使用的,在web应用程序关闭时,对内存中的所有HttpSession对象进行持久化,把他们保存到文件系统中。默认的存储文件为
<tomcat 安装目录>\work\Catalina\<主机名>\<应用程序名>\sessions.ser
PersistentManager比StandardManager更为灵活,只要某个设备提供了实现org.apache.catalina.Store接口的驱动类,PersistentManager就可以将HttpSession对象保存到该设备
文章信息来源:
http://aguang520.iteye.com/blog/794619
分享到:
相关推荐
如果客户端不支持 Cookie,Servlet 容器可以通过重写 URL 来实现 Session 的跟踪。 三、Session 的管理 当一个 Session 开始时,Servlet 容器会创建一个 HttpSession 对象。在某些情况下,把这些 HttpSession 对象...
以上就是使用`SessionListener`、持久化`Session`和`Springmvc拦截器`实现单点登录的基本原理和实现步骤。通过这样的设计,可以有效地提升用户体验,同时确保系统的安全性。在实际项目中,还需要根据具体需求进行...
每个session都有一个唯一的ID,这个ID通过cookie或者URL重写等方式发送给客户端。客户端在后续的请求中携带此ID,服务器据此识别出对应的session。session在默认情况下会在客户端一段时间无活动后自动失效。 3. ...
例如,WebLogic Server支持多种Session持久化方式,包括文件、数据库、客户端Cookie保存和复制。 #### 三、Session在Java中的实现 在Java Web开发中,Session的实现主要通过`javax.servlet.http.HttpSession`接口...
1. **参数控制**:WebLogic Server提供了一系列参数来控制其`HttpSession`的实现方式,包括是否使用Cookie、URL重写、Session的持久化设置、Session的有效期设置以及Cookie的相关配置等。 2. **持久化设置**:通常...
注意,虽然Memcached提供了一种快速的session存储解决方案,但也要考虑其局限性,如数据持久化、安全性等问题。在实际应用中,可能需要结合其他技术,如Redis或数据库,以提供更全面的解决方案。
4. **表单数据持久化**:对于多步骤的表单,可以将用户的输入暂存于Session中,方便用户返回上一步进行修改。 #### 五、Session的生命周期 Session的生命周期通常包括以下几个阶段: 1. **创建**:当用户第一次...
虽然这个系统没有使用数据库进行持久化存储,但仍然可以展示基本的添加、删除商品以及计算总价等核心功能。 【主要知识点】 1. **JSP与Servlet**: JSP是动态网页技术,用于创建视图层,而Servlet是Java Web开发...
- 为了提高性能和扩展性,大型应用往往不直接存储大量数据在Session中,而是用Session作为用户标识,将购物车数据持久化到数据库或其他缓存系统。 在“SessionCart”这个文件中,很可能包含了实现上述功能的Servlet...
这两个方法是Servlet处理请求的核心,开发者通常会重写它们以实现特定的业务逻辑。 ### 5. Request与Response对象 `HttpServletRequest`和`HttpServletResponse`对象在`service()`方法中传递,用于获取请求信息和...
3. 为了持久化用户登录状态,服务器还可以创建一个包含Session ID的Cookie(默认名为JSESSIONID),并将其设置为浏览器,这样每次请求时,浏览器都会自动携带这个Cookie。 4. 用户再次访问其他受保护的页面时,...
- 使用URL重写,即将SessionID附加到URL上,不依赖Cookie。 - 使用Local Storage或Session Storage(HTML5引入),存储在客户端,适用于单页应用。 - 利用数据库或分布式缓存(如Redis)存储用户状态,适用于大型...
在IT行业中,尤其是在Web应用程序开发领域...但是,也要注意Redis的数据持久化和安全性,防止因服务器故障导致Session丢失。在大型分布式系统中,合理地管理和共享Session是保持用户体验一致性和系统稳定性的重要环节。
如果需要更复杂的功能,如session管理、过滤器等,就需要使用Servlet容器。 在实际项目中,我们通常不会从零开始编写整个HTTP服务器和Servlet引擎,而是选择已有的成熟框架,如Spring Boot,它提供了内置的Tomcat...
它们可以被JSP页面和Servlet共同使用,实现数据的持久化和业务逻辑的复用。例如,`ProductBean`可能包含了商品ID、名称、价格等属性,以及添加、删除、更新商品的方法。 数据库方面,项目可能采用了MySQL等关系型...
它的优势在于序列化和反序列化速度极快,内存占用少,非常适合在网络之间或者持久化到内存中存储数据。在Tomcat Session共享中,Kryo可以将Session对象转换为字节数组,然后在各个节点间传递。 接着,配置Tomcat ...
标题 "基于原生Servlet与JSP实现的简单个人博客系统" 暗示了这是一个使用Java Web...通过实现这样一个个人博客系统,学生能够学习到Web应用的生命周期管理、请求响应流程、数据持久化、用户交互设计等多个方面的知识。
订单信息同样需要持久化到数据库中。 5. 订单状态跟踪:系统应能显示订单的状态,如待支付、已支付、正在处理、已完成等。Servlet会监控这些状态变化,并更新前端展示。 6. 支付集成:如果系统支持在线支付,还...
4. Session和Cookie:Session用于跟踪用户的会话状态,而Cookie可以持久化用户数据在客户端,两者在Web开发中用于实现用户登录状态的保持。 5. URL映射:通过在Servlet的web.xml配置中,或者使用@WebServlet注解,...