何时/什么JSESSIONID是创建a的条件?
是按域名吗?例如,如果我有一个Tomcat应用服务器,并且我部署了多个Web应用程序,JSESSIONID那么每个上下文(Web应用程序)是否会创建不同的Web应用程序,或者只要它们是同一个域,它是否可以跨Web应用程序共享?
是否有可能在tomcat的url中关闭jsessionid?jsessionid似乎对搜索引擎不太友好.
我需要在单个物理盒中运行多个tomcat服务器.从浏览器访问这些内容时,当用户在应用程序之间切换时,会导致用户先前登录访问应用程序.这是因为JSESSIONID cookie冲突.
一种可能的解决方案是在不同的上下文中运行每个应用 不幸的是,我的应用程序不能在上下文路径设置中工作,因为前面没有前面的request.getContextPath()访问任何资源.
这使我可以更改cookie JSESSIONID的名称来解决冲突.有没有办法做到这一点?如果有,怎么样?
希望我能说清楚我的问题.
注意:我的所有应用程序都在同一台机器的不同端口运行.
我有一些奇怪的错误:当我第一次在某个浏览器中打开页面时,所有引用都有jsessionid参数(如<a href="/articles?name=art&jsessionid=5as45df4as5df"..>).
当我按F5或以任何其他方式刷新页面时,所有这些东西都消失了,一切正常,直到我关闭浏览器(并且所有选项卡也应该关闭).当我再次打开它时,我看到了这个奇怪的jsessionid参数.
我使用jstl <c:url..>标签来创建所有URL.
我已经读过一段时间了,如果禁用cookie,jsessionid是cookie的替代品,但cookie已经启用,我实际上不使用cookie.
我想知道什么是host onlycookie.
在检索a时form auth,浏览器会在标题中显示一个JSESSIONID cookie host only.
我工作的产品得到了潜在客户的严格安全审核,他们对Tomcat在认证发生之前设置JSESSIONID cookie感到不安.也就是说,Tomcat在加载无状态登录页面时设置此cookie,但在登录之前.
他们建议以下任何一种:
我一直在浏览这个网站上与JSESSIONID相关的所有内容,但却找不到简单的答案.我只是希望有一些想法.我最好的解决方案是:
我得睡一觉,但早上会尝试这些.能够比我更聪明的人得到一些反馈或更好的建议真是太棒了 - 就像你一样!
无论如何,我会在这里发布我的结果,因为似乎很多其他人都想做类似的事情.
设置Tomcat为servlet会话发送的JSESSIONID cookie的截止日期的最佳方法是什么?
默认情况下,cookie的到期日期似乎是"会话",这意味着一旦浏览器重新启动,会话就会在客户端中消失.但是我想让它保持打开12小时,即使在浏览器重启后(然后会相应地在服务器中配置会话超时).
有没有办法在Tomcat中设置过期日期,例如使用某些配置选项或扩展模块?或者是否有可靠的方法使用Servlet过滤器为JSESSIONID设置过期日期?
我的Web应用程序在Tomcat中运行,http://localhost:8080/example.com/但它正在从http://example.com/端口80上提供的Apache进行反向代理.我的Web应用程序查看request.getHeader("x-forwarded-host")标头以了解它是在反向代理之后.当它(动态地)检测到它时,它会在没有servlet路径的情况下构建URL.
这适用于除JSESSIONID cookie之外的所有内容.它通过路径/example.com而不是/通过反向代理访问时设置.我无法弄清楚当代码上有x-forwarded-host标题时,我的代码如何告诉Tomcat覆盖该cookie的路径.
我自己尝试从Web应用程序设置JSESSIONID cookie,但这只会产生两个Set-Cookie标头,其中只有一个是正确的.
我正在尝试在不利用cookie的情况下管理Spring Security中的会话.原因是 - 我们的应用程序显示在另一个域的iframe中,我们需要在我们的应用程序中管理会话,并且Safari限制跨域cookie的创建.(上下文:domainA.com在iframe中显示domainB.com.domainB.com正在设置一个JSESSIONID cookie以在domainB.com上使用,但由于用户的浏览器显示domainA.com - Safari限制domainB.com创建cookie) .
我能想到的唯一方法(针对OWASP安全建议) - 将URL中的JSESSIONID作为GET参数包含在内.我不想这样做,但我想不出另一种选择.
所以这个问题都是关于:
回顾Spring的文档,使用enableSessionUrlRewriting应该允许这样做
所以我做到了这一点:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.ALWAYS)
.enableSessionUrlRewriting(true)
Run Code Online (Sandbox Code Playgroud)
这没有将JSESSIONID添加到URL,但现在应该允许它.然后我利用此问题中的一些代码将"跟踪模式"设置为URL
@SpringBootApplication
public class MyApplication extends SpringBootServletInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
super.onStartup(servletContext);
servletContext
.setSessionTrackingModes(
Collections.singleton(SessionTrackingMode.URL)
);
Run Code Online (Sandbox Code Playgroud)
即使在此之后 - 应用程序仍然将JSESSIONID添加为cookie而不是URL.
有人可以帮助我指出正确的方向吗?
我想配置我的servlet上下文,例如设置自定义jsessionId键(请参阅更改cookie JSESSIONID名称)
我相信我可以使用SpringBootServletInitializer运行WAR文件时,操纵servletContext在onStartup().但是,当我在嵌入式应用程序服务器上运行时
new SpringApplicationBuilder().run(),我不知道操作servlet上下文的最佳位置.
jsessionid ×10
java ×5
tomcat ×5
cookies ×2
servlets ×2
cross-domain ×1
iframe ×1
java-ee ×1
jsp ×1
jstl ×1
login ×1
session ×1
spring-boot ×1