如果有人在我的浏览器中禁用cookie,我该如何在java中进行会话?

时间:2010-01-14 16:35:43

标签: java jsp servlets cookies

我想知道是否有人在我的浏览器中禁用了cookie,然后cookie不适用于我的浏览器,那么我该如何在java中进行会话。我正在为服务器端编程编写servlet。 那我的会议如何运作?它如何识别用户?由于JSESSION ID存储在cookie中......

8 个答案:

答案 0 :(得分:12)

请参阅HttpServletResponse encodeURL()encodeRedirectURL()

如果浏览器不支持cookie,这些功能将适当地重写您的URL以包含会话信息。根据您正在使用的Java Web框架,可以自动调用这些函数(只要您使用框架的方法来编写URL)。

请注意,由于在链接中显示会话ID的安全性和缓存含义,在所有情况下都可能不需要这样做。 This page在这个短片空间中比我能更好地总结了这些问题,并提供了一种禁用此功能的方法。

答案 1 :(得分:5)

您需要将jsessionid附加到您的网络应用程序中涉及的应由客户端调用的所有网址。这包括重定向URL和JSP页面中的链接。

如果是重定向网址,您需要先使用HttpServletResponse#encodeRedirectURL()

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

如果是JSP页面中的链接,您首先需要通过HttpServletResponse#encodeURL()传递这些URL。您可以在JSTL的帮助下执行此操作(只需在/WEB-INFjstl-1.2.jar标记中删除<c:url>,它将在幕后通过上述方法传递URL:< / p>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
    <a href="<c:url value="page1.jsp" />">link1</a>
    <a href="<c:url value="page2.jsp" />">link2</a>
    ...
    <form action="<c:url value="servlet" />" method="post">
        ...
    </form>

答案 2 :(得分:2)

如果禁用了cookie,您仍然可以通过将JSESSIONID的值作为查询参数发送来维护会话,例如:

http://www.mywebsite.com/somePage?JSESSIONID=389729387392

请记住,如果安全性是主要问题,那么您可能不想使用此方法,因为它会将会话ID直接放入网址。

答案 3 :(得分:2)

作为参考,我们很高兴知道html5引入sessionStorage作为Web Storage的一部分。 24ways.org上有一篇很好的文章介绍它:Breaking Out The Edges of The Browser

支持:

  • 最新:Internet Explorer,Firefox,Safari(桌面和移动/ iPhone)
  • 部分:Google Chrome(仅支持localStorage
  • 不支持:Opera(截至10.10)

HTML5 (including next generation additions still in development)

答案 4 :(得分:1)

如果禁用了cookie,大多数会话提供程序会附加一个名为JSESSIONID的URL参数来维护会话状态

答案 5 :(得分:1)

正如其他人所提到的,你是servlet容器,例如tomcat,如果浏览器不允许cookie,则自动转向将JSESSIONID放入url中。它可以在tomcat中配置,正如您在answer中看到的那样。

我的建议是你只是尝试一下。立即使用您的Web应用程序,无需更改,并在禁用cookie的浏览器中运行它,看看会发生什么。

答案 6 :(得分:1)

其他答案很棒;我不需要重复。但我确实有一些额外的评论。

请不要将会话数据(整个会话)放在cookie中,而只放入会话ID,可能是哈希。人们很容易编辑cookie的内容。将会话数据保留在服务器上;可能在数据库中,如果你有很多并发用户或会话很长时间。

如果即使会话ID本身非常珍贵,您甚至可以将其放在POST参数中,从而防止它出现在URL本身中。

答案 7 :(得分:0)

查看JSP页面的标准taglib,特别是<c:url>标记。

http://onjava.com/pub/a/pub/a/onjava/2002/05/08/jstl.html?page=2

我相信如果没有cookie,它还会处理jsession-id属性。