为啥我的 url 中有会话 ID?

Posted

技术标签:

【中文标题】为啥我的 url 中有会话 ID?【英文标题】:Why is my session id in my url?为什么我的 url 中有会话 ID? 【发布时间】:2011-05-04 00:33:56 【问题描述】:

所以我在这里完成了构建基本 roo 应用程序的步骤:http://static.springsource.org/spring-roo/reference/html/beginning.html

我启动了我的服务器并开始玩这个应用程序,不禁注意到我的 url 中有一个“jsessionid”:

http://localhost:8080/pizzashop/pizzas;jsessionid=0A8EA5D9E8665C8AC80F141C3818F6BA?form

我根本不在乎这个!为什么 URL 中需要会话 ID?我可以摆脱这个吗?那里有这个似乎不是 RESTful。

【问题讨论】:

【参考方案1】:

这是标准的 JavaEE 行为,由 servlet 容器规定和控制。它与 Spring 无关。

请参阅this previous question,了解创建它的原因和时间,以及如何避免它。

【讨论】:

如何在不禁用会话的情况下避免它是answered here。【参考方案2】:

我在另一个问题中没有看到这个答案,所以我想解释一下。会话在 java 和我认为 php 中的工作方式是,当客户端第一次出现时,它会创建一个 cookie 并将 JESSIONID 附加到所有使用 <c:url/> 标记的 url。这样做的原因是因为客户端第一次访问页面时,服务器不知道客户端是否支持 cookie。所以它两者兼而有之。下一次,因为它看到了 cookie,它实际上将不再使用 URL,因为它知道 cookie 有效。

有很多方法可以禁用它。如果您根本不使用会话,则可以通过在 context.xml 中放置 cookies=false 来禁用 cookie。这只会禁用会话的 cookie,而不是常规 cookie。然后,您可以使用 urlrewrite 发送 sessionid。

希望对您有所帮助。

【讨论】:

【参考方案3】:

您使用的是什么应用服务器?我知道至少在第一次调用时,Weblogic 至少会始终执行 URL 编码会话以及基于 cookie 的会话,以查看客户端上是否启用了 cookie。如果在下次调用时找不到与 URL 会话 id 匹配的 cookie,它将继续使用来自 URL 的会话令牌。我知道当他们将我们的公司切换到使用 Sharepoint 进行网络爬虫和搜索时,Windows 网络人员就这个问题抱怨了很长时间,直到他们终于明白他们所要做的就是打开 cookie 会话支持。

【讨论】:

【参考方案4】:

在我的情况下,当应用程序部署在我的桌面上而不使用 https 时,就会发生这种情况。在weblogic.xml 的这种情况下,cookie-secure 应设置为 false。否则 cookie 管理的会话 ID 将只能通过 https 工作。

<wls:cookie-secure>false</wls:cookie-secure>

【讨论】:

以上是关于为啥我的 url 中有会话 ID?的主要内容,如果未能解决你的问题,请参考以下文章

为啥php每次在测试环境(WAMP)中生成相同的会话ID?

为啥 Apache Livy 会话显示应用程序 id 为 NULL?

session 与 cookie

为啥不使用长寿命会话 ID 来代替带有令牌的持久 cookie?

为啥我在使用 Godaddy 服务器的 MVC3 应用程序中有不稳定的会话

Tomcat 7/JBoss7 的自定义会话 ID 生成器