`

URL 重写来实现会话管理

阅读更多
原帖地址:http://www.iteye.com/topic/620288


[size=medium]
通常,会话管理是通过服务器将 Session ID 作为一个 cookie 存储在用户的 Web 浏览器中来唯一标识每个用户会话。如果浏览器不支持 cookies,或者将浏览器设置为不接受 cookies,我们可以通过 URL 重写来实现会话管理。

  实质上 URL 重写是通过向 URL 连接添加参数,并把 session ID 作为值包含在连接中。然而,为使这生效,你需要为你的 servlet 响应部分的每个连接添加 session ID 。

   把 session ID 加到一个连接可以使用一对方法来简化:response.encodeURL() 使 URL 包含 session ID,如果你需要使用重定向,可以使用 response.encodeRedirectURL () 来对 URL 进行编码。

  encodeURL () 及 encodeRedirectedURL () 方法首先判断 cookies 是否被浏览器支持;如果支持,则参数 URL 被原样返回,session ID 将通过 cookies 来维持。

  来看下面的例子,两个 JSP 文件:hello1.jsp 和 hello2.jsp,及它们之间的影响。我们在 hello1.jsp 中简单的创建一个会话,并在 session 中存储一个对象实例。接着用户可以点击页面的连接到达 hello2.jsp。在 hello2.jsp 中,我们从 session 中获取原先放置的对象并显示它的内容。注意,我们在 hello1.jsp 中调用了 encodeURL() 方法来获得 hello2.jsp 的链接,使得在浏览器停用 cookies 的情况下,session ID 自动添加到 URL,hello2.jsp 仍能得到 session 对象。

  首先在启用 cookies 的情况下运行。然后关闭对 cookie 的支持,重启浏览器,再运行一次。每次你都可以看到会话管理在起作用,并能在页之间传递信息。

注意,如果你想让这个例子能在关闭了 cookies 的浏览器中工作,你的 JSP 引擎必须支持 URL 重写。

hello1.jsp

<%@ page session="true" %>   
<%   
Integer num = new Integer(100);   
session.putValue("num",num);   
String url =response.encodeURL("hello2.jsp");   
%>   
<a href='<%=url%>'>hello2.jsp</a>  

<%@ page session="true" %>
<%
Integer num = new Integer(100);
session.putValue("num",num);
String url =response.encodeURL("hello2.jsp");
%>
<a href='<%=url%>'>hello2.jsp</a>


hello2.jsp

<%@ page session="true" %>   
<%   
Integer i= (Integer)session.getValue("num");   
out.println("Num value in session is "+i.intValue());   
%>  

<%@ page session="true" %>
<%
Integer i= (Integer)session.getValue("num");
out.println("Num value in session is "+i.intValue());
%>


使用时,若你的浏览器支持cookie的话,要设置为不支持cookie,才会有效果,你将看到链接后的页面地址,追加了sessionID的值。



response.sendRedirect(response.encodeURL(ABC));   
response.sendRedirect(ABC);   

response.sendRedirect(response.encodeURL(ABC));
response.sendRedirect(ABC); 
用response.sendRedirect(response.encodeURL(ABC))的好处就是他能将用户的session追加到网址的末尾,也就是能够保证用户在不同的页面时的session对象是一致的.
这样做的目的是防止某些浏览器不支持或禁用了COOKIE导致session跟踪失败 [/size]

分享到:
评论

相关推荐

    URL重写概念和例子

    为了更好地理解URL重写,可以通过一个简单的例子来说明:假设原来的URL为`UserProfile.aspx?ID=1`,经过重写后变为`UserProfile/1.aspx`。这样的改动不仅使得URL更加简洁易读,同时也有利于网站的管理和用户的友好...

    asp+asp.net1.1 URL重写

    ASP 和 ASP.NET 1.1 是两种不同的微软技术,用于构建动态网页应用程序。ASP(Active Server Pages)是早期的服务器端脚本技术,...在实践中,可以借助开源的URL重写库,如Microsoft的UrlRewritingNet,来简化开发工作。

    asp.net url重写

    在实际开发中,我们还需要考虑到URL重写可能带来的问题,如URL重定向、会话状态管理、链接生成等。在配置URL重写规则时,应确保所有内部链接都能正确解析,同时保证已有的外部链接不会失效。 总结,ASP.NET URL重写...

    JAVA URL重写

    2. **掌握URL重写的基本思想及实现方法:** URL重写是一种通过在URL中添加额外参数来实现会话跟踪的技术。当用户禁用Cookie时,服务器可以通过URL重写的方式来保持会话的状态。 #### 二、实验内容概述 本实验的...

    购物车的四种做法(hidden、url重写、cookie、会话)

    这里我们将探讨四种常见的实现购物车功能的技术方法:隐藏表单(hidden)、URL重写、Cookie以及会话(Session)。 1. 隐藏表单(Hidden) 隐藏表单字段是HTML表单中的一种元素,它们对用户不可见,但可以在提交表单...

    IIRF_URLRewrite基于IIS层的IIRF实现URL重写+完美解决POSTBACK问题

    然而,URL重写可能会导致POSTBACK时的问题,因为服务器可能无法识别原始的URL,这通常与会话状态管理、回退按钮和书签功能有关。 IIRF_URLRewrite提供的解决方案是通过配置规则来确保POSTBACK请求能够正确地路由到...

    URLRewriter重写url 组件 UrlRewriter.dll X86 X64通用

    - `UrlRewriter.dll`是该组件的核心库,它实现了URL重写功能,可以被集成到IIS服务器中。这个库提供了丰富的API,允许开发者自定义重写规则,以满足特定的业务需求。 - 无论是X86还是X64系统,这个组件都能兼容,...

    JSP实现浏览器关闭cookies情况下的会话管理.docx

    以下是一个简单的JSP应用示例,展示了如何在关闭cookies的情况下使用URL重写来管理会话: 1. `hello1.jsp`:在这个页面中,我们首先创建一个新的会话,并在其中存储一个对象(例如,一个整数)。然后,我们使用`...

    会话状态跟踪技术选择

    2. **URL重写**:这种方式不需要使用Cookie,而是通过在每个链接后面附加会话标识符来实现状态跟踪。 - **优点**:适用于不支持Cookie的浏览器环境。 - **缺点**:可能会导致URL变得冗长复杂;难以管理和维护。 3...

    URLRewriter asp.net重写url

    在ASP.NET中,URL重写通常用于将复杂的、参数化的URL转换为简洁的、有意义的URL,这有助于提升用户体验和搜索引擎排名。 URLRewriter的核心功能包括: 1. **规则定义**:URLRewriter通过XML配置文件或代码中定义的...

    2. 20181218-会话管理1

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

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

    - **会话跟踪**:除了通过Cookie进行会话跟踪外,还可以通过URL重写的方式来传递会话标识。这种方式主要用于解决那些禁用了Cookie的浏览器问题。 #### 三、存在的问题及改进方案 ##### 3.1 存在的问题 - **安全性...

    Global.asax的Application_BeginRequest实现url重写无后缀的代码

    本文重点介绍了如何在Global.asax的Application_BeginRequest事件中编写代码以实现URL重写。 在Web应用程序中,URL重写是一项常见的技术,它允许将易于记忆和搜索引擎优化(SEO)友好的URL映射到实际的物理资源上。...

    JSP中会话跟踪的操作

    3. **隐藏表单字段**:类似于URL重写,但通过在HTML表单中添加一个隐藏的输入字段来携带会话ID。 三、使用JSP内置对象`HttpSession` 在JSP中,我们可以直接使用内置对象`HttpSession`来操作会话。以下是一些常用...

    java会话管理、多线程.docx

    Java通过HttpSession接口来实现会话管理,允许开发者存储和检索特定用户的数据。创建会话通常通过HttpServletRequest对象的getSession()方法完成,如果会话不存在,该方法会创建一个新的会话。 Java多线程是并发...

    ASP.NET4.0 URL地址多了一串字符串

    这意味着ASP.NET不会尝试通过URL重写的方式传递会话ID,而是默认通过Cookie来实现。 #### 问题原因 - **Cookie禁用**:如果客户端浏览器禁用了Cookie功能,那么即使在服务器端配置了使用Cookie来维护会话状态,ASP...

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

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

    网站安全urlrewrite教程和jar包

    在本教程中,我们将深入探讨URL重写的核心概念、使用场景以及如何借助`urlrewrite`工具来实现这一功能。 首先,URL重写的核心原理是利用服务器的内部重定向机制,将用户请求的可见URL转换为服务器内部处理的实际URL...

    Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    ### Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解 #### 一、前言 Nginx是一款广泛使用的高性能HTTP和反向代理Web服务器,也是邮件代理服务器,并具有IMAP/POP3/SMTP服务。Nginx以其稳定性、丰富的...

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

    2. **URL重写**:将会话ID附加到URL的末尾,以便服务器可以根据URL中的ID识别会话。这可以是直接附加ID,或者作为查询参数。 3. **Cookie**:服务器可以向客户端发送一个Cookie,其中包含会话ID。在后续请求中,...

Global site tag (gtag.js) - Google Analytics