为啥我的 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?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Apache Livy 会话显示应用程序 id 为 NULL?
为啥不使用长寿命会话 ID 来代替带有令牌的持久 cookie?