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

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

请参阅HttpServletResponse encodeURL()和encodeRedirectURL() 。

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

请注意,由于在链接中显示会话ID的安全性和缓存含义,这在所有情况下可能都不可取。 此页面在这个简短的空间中总结了比我更好的问题,并提供了一种禁用此function的方法。

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

如果是重定向URL,则需要首先使用HttpServletResponse#encodeRedirectURL()

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

对于JSP页面中的链接,您基本上需要首先通过HttpServletResponse#encodeURL()传递这些URL。 您可以在JSTL的帮助下(只需在/WEB-INF删除jstl-1.2.jar ) 标签,它将在幕后通过上述方法传递URL:

 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> ... ">link1 ">link2 ... 
" method="post"> ...

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

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

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

作为参考,很高兴知道html5引入了sessionStorage作为Web Storage的一部分。 24ways.org上有一篇很好的文章介绍它: 打破浏览器的边缘 。

支持:

  • 最新:Internet Explorer,Firefox,Safari(桌面和手机/ iPhone)
  • 部分:谷歌浏览器(仅支持localStorage
  • 不支持:Opera(截至10.10)

HTML5(包括仍在开发中的下一代新增function)

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

正如其他人所提到的,如果浏览器不允许使用cookie,那么servlet容器(例如tomcat)会自动调整将JSESSIONID放入url中。 它可以在tomcat中配置,你可以在这个答案中看到。

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

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

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

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

查看JSP页面的标准taglib,特别是标记。

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

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