M S*_*ach 6 java session tomcat servlets web-applications
我有一个非常基本的问题,即如何创建HTTPSession.我知道你们会因为类似的问题存在而解雇这个问题.但是有理由我为什么要问这个问题这里是: -
我知道httpsession是Web浏览器所独有的,当我们第一次执行HttpServletRequest.getSession时,服务器会创建它.它将保持相同的会话直到我们关闭浏览器.但我有一点点不同的场景.我在一个tomcat实例上有一个Web应用程序说T1.On这个Web应用程序的欢迎页面我提供了两个链接,点击其中带我到不同的Web应用程序托管的相同java servlet(S1)在另一个tomcat实例T2上(这两个链接打开两个单独的弹出窗口).现在我首先点击link1并检查S1中的sessionId并找到它的值为1678.现在首先我点击link2并检查S1中的sessionId并再次找到它的值为1678. 我的问题是为什么我得到相同的会话来自link1和link2的请求的id?我该怎么做才能获得这两个请求的不同会话?
在网上寻找可能的解决方案后我尝试了什么: -点击link1,在Servlet S1中,我复制会话属性,使其无效并创建新的属性.说新的会话ID是8765.现在我点击link2并在此请求中找到相同的会话.所以我进一步使它无效并创建一个新的(比如新的会话ID是4897).理想情况下,它应该到期第一个浏览器会话(单击link1时生成).为了验证它,我点击弹出的任何地方1它没有过期,但我再次看到最后生成的会话ID,即4897.我不知道为什么它与两个弹出窗口附加相同的会话ID?
感谢您耐心等待时间并阅读这个漫长的场景?
编辑: -
Cookie[] cookies = req.getCookies();
if(cookies!=null)
for (int i = 0; i < cookies.length; i++) {
cookies[i].setMaxAge(0);
context.getResponse().getHttpServletResponse().addCookie(cookies[i]);
}
HttpSession myAppSession = req.getSession();//line 1
Run Code Online (Sandbox Code Playgroud)
假设点击link1我得到会话ID为1234,然后点击链接2后我也得到相同的会话ID.根据我的理解,在执行第1行上面的代码后,我应该获得不同的会话ID,因为我在获取会话之前将MaxAge设置为0.但它没有发生?
Ram*_*PVK 12
我认为这就是你要找的东西:
默认情况下,会话跟踪通过cookie进行.WebServer以cookie的形式将会话ID发送到浏览器.并且,浏览器发送具有后续请求的会话ID的cookie.
浏览器如何识别要为链接/请求发送的cookie? 它基于这些参数.如果请求与这些参数匹配,则浏览器会发送该特定cookie:
这些参数将允许浏览器将cookie发送到服务器.并且因为您正在为两个实例发送相同的cookie.我认为会话ID正在共享.
如果请求URI之间的请求属性,域和路径(即上下文根)在请求之间是相同的,则无法告诉浏览器使用不同的cookie.
您有以下几种选择:
| 归档时间: |
|
| 查看次数: |
5825 次 |
| 最近记录: |