【问题标题】:Manage Session when broswer has disable cookies浏览器禁用 cookie 时管理会话
【发布时间】:2010-12-20 05:46:38
【问题描述】:

我想知道如果客户端浏览器禁用了 cookie 功能,我该如何管理会话..

如果我想用简单的 JSP - Servlet 来实现它,那我该怎么做呢?

提前谢谢...

【问题讨论】:

    标签: java jsp session servlets


    【解决方案1】:

    在JSP端,你可以使用JSTL<c:url>

    <a href="<c:url value="page.jsp" />">link</a>
    

    就这么简单。当 cookie 被禁用时,它会自动附加 jsessionid

    在 Servlet 方面,您需要 HttpServletResponse#encodeURL() 或 - 通常是 Servlets 中首选的 - HttpServletResponse#encodeRedirectURL()

    response.sendRedirect(response.encodeRedirectURL("page.jsp"));
    

    【讨论】:

      【解决方案2】:

      每个网址都必须使用response.encodeURL("page.jsp")进行编码

      这会将会话 ID 添加到每个 URL 的末尾,因此不必启用 cookie。

      请注意,您必须为每个 URL 手动执行此操作才能使其正常工作。

      请参阅this link 了解更多信息。

      【讨论】:

        【解决方案3】:

        没有 cookie,您有两种选择。第一个是通过 Urls 传递 sessionId。这需要在服务器上进行大量工作,因为您发回的每个 url 都必须附加一个 sessionId(通常以查询字符串参数的形式)。例如:

        /路径/到/页面

        变成

        /path/to/page?sessionid=ASDFG-ASDFG-ASDFG-ASDFG-ASDFG

        您的另一个选择是将通过 http 获得的信息组合到“唯一”密钥中并创建您自己的会话存储桶。通过结合 Http UserAgent、RemoteIp 和 RemoteXfip,您可以接近唯一地标识用户,但不能保证此密钥是 100% 唯一的。

        【讨论】:

        • 如果我在浏览器中按 F5 选择第二个选项会发生什么?
        • 由于用户代理、remoteIp 和remoteXfip 都在所有请求中发送到服务器,您可以创建相同的“唯一”密钥并搜索您的会话存储桶。这就是第二种方案的优点,它不需要对网站结构或url结构做任何改变
        【解决方案4】:
        猜你喜欢
        • 1970-01-01
        • 2014-11-29
        • 2014-02-21
        • 2014-10-12
        • 2013-07-18
        • 2016-11-14
        • 2021-07-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多