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

如果有人在我的浏览器中禁用cookie,我如何使用java进行会话?,java,jsp,servlets,cookies,Java,Jsp,Servlets,Cookies,我想知道如果有人在我的浏览器中禁用了cookies,那么cookies在我的浏览器中不起作用,那么我如何在java中进行会话。我正在为服务器端编程编写servlet。 那么我的会话是如何工作的呢?它如何识别用户?由于JSESSION ID存储在Cookie中…如果禁用Cookie,您仍然可以通过发送JSESSION ID的值作为查询参数来维护会话,如: http://www.mywebsite.com/somePage?JSESSIONID=389729387392 请记住,如果安全性是一个主

我想知道如果有人在我的浏览器中禁用了cookies,那么cookies在我的浏览器中不起作用,那么我如何在java中进行会话。我正在为服务器端编程编写servlet。
那么我的会话是如何工作的呢?它如何识别用户?由于JSESSION ID存储在Cookie中…

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

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

请记住,如果安全性是一个主要问题,那么您可能不想使用这种方法,因为它会将会话id放在url中。

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

请参阅HttpServletResponse和

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


请注意,由于使会话ID在链接中可见的安全性和缓存影响,这在所有情况下都可能不是理想的。在这么短的篇幅内,我对问题进行了比以往更好的总结,并提供了一种禁用此功能的方法。

正如其他人所提到的,如果浏览器不允许cookies,您的servlet容器(例如tomcat)会自动将JSESSIONID放入url中。正如您在本文中看到的,它在tomcat中是可配置的


我的建议是你干脆试试看。将您的web应用程序保持原样,不做任何更改,在浏览器中禁用cookie运行它,看看会发生什么。

查看JSP页面的标准标记库,尤其是
标记


我相信,如果cookie不可用,它也会处理jsession id属性。

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

如果是重定向URL,您需要首先使用:

对于JSP页面中的链接,基本上需要首先传递这些URL。您可以借助于的(只需插入
/WEB-INF
)标记来完成此操作,它将通过上述方法在后台传递URL:

<%@ 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>

...
...
...

作为参考,很高兴知道html5引入了
会话存储
。24ways.org上有一篇介绍它的好文章:

支持:

  • 最新版本:Internet Explorer、Firefox、Safari(台式机和手机/iPhone)
  • 部分:Google Chrome(仅支持
    localStorage
  • 不支持:Opera(从10.10开始)

其他答案都很好;我不需要重复了。但我还有一些补充意见

请不要将会话数据(整个会话)放在cookie中,而只放一个会话id,可能是散列的。人们编辑cookie的内容太容易了。将会话数据留在服务器上;如果有大量并发用户或会话,则可能在数据库中使用


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

正如一些答案所示,有多种方法。一个重要的问题是——它应该有多安全?如果它是一个博客,不是很好。如果是银行业,还有很多。这确实会影响解决方案。没有各种方法。只有一种方法:编码/重写URL以包含(某种)会话ID。没有其他方法。只要你不把URL泄露给别人,它就足够安全了。对于银行业务,您始终可以根据
用户代理
和/或
远程属性
标题再添加一张支票,并将其绑定到特定会话。我们是否仍然依赖这些URL重写或cookie技术?链接的答案是错误的。
cookies=“false”
将永久禁止使用cookies来维护会话,并且不会自动为每个请求重写URL。它只会对普通的GET请求执行此操作(因此不会对POST请求执行此操作)。然后,你必须更改页面中的所有链接以包含URL重写。禁用Cookie的人很可能也会禁用这些链接。正如你在浏览器中看到的那样,当禁用Cookie时,可能会自动禁用存储。
<%@ 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>