我在Websphere Liberty Profile 16.0.0.2上运行Spring应用程序。成功登录后,我在请求标头中看到JSESSIONID cookie为J1。我使会话无效并创建一个新会话。现在,下一个请求包含相同的JSESSIONID cookie值,即J1,而不是会话失效后的预期新内容。
经过一些研究,我通过server.xml尝试了以下会话管理设置。
<!DOCTYPE html>
<html ng-app="MyApp">
<head>
<base href="/">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>ShowTrackr</title>
<link rel="icon" type="image/png" href="favicon.png"/>
<link href="stylesheets/style.css" rel="stylesheet">
</head>
<body>
<!-- Nav Bar -->
<div class="navbar navbar-default navbar-static-top"
role="navigation" bs-navbar>
<div class="navbar-header">
<a class="navbar-brand" href="/">
<span class="glyphicon glyphicon-film"></span>
Show<strong>Trackr</strong></a>
</div>
<ul class="nav navbar-nav">
<li data-match-route="/$"><a href="/">Home</a></li>
<li data-match-route="/add"><a href="/add">Add</a></li>
</ul>
<ul class="nav navbar-nav pull-right" ng-if="!currentUser">
<li data-match-route="/login"><a href="/login">Login</a></li>
<li data-match-route="/signup"><a href="/signup">Sign up</a></li>
</ul>
<ul class="nav navbar-nav pull-right" ng-if="currentUser">
<li class="navbar-text" ng-bind="currentUser.email"></li>
<li><a href="javascript:void(0)" ng-click="logout()">Logout</a></li>
</ul>
</div>
<div ng-view></div>
<script src="vendor/angular.js"></script>
<script src="vendor/angular-strap.js"></script>
<script src="vendor/angular-strap.tpl.js"></script>
<script src="vendor/angular-messages.js"></script>
<script src="vendor/angular-resource.js"></script>
<script src="vendor/angular-route.js"></script>
<script src="vendor/angular-cookies.js"></script>
<script src="vendor/moment-with-locales.js"></script>
<script src="app.js"></script>
</body>
</html>
不过,行为仍然相同。
有趣的是,当我在Tomcat 8上部署相同的Web应用程序时,我会看到不同的JSESSIONID cookie值。 WLP更顽固。请建议。
答案 0 :(得分:0)
JSESSIONID cookie可以由客户端指定。如果不是这样,可能是由于cookie保留或从浏览器缓存。尝试从客户端清除cookie。
Request.getRequestedSessionId()应该能够验证它:
答案 1 :(得分:0)
我试图在WebSphere Liberty服务器上运行涉及表单登录和注销的Web应用程序中查找JSESSIONID行为。
1)当显示登录页面时,存在JSESSIONID cookie,让我们说ID为J1。使用有效的用户/密码登录后,JSESSIONID按预期保留J1。
2)然后我做了logout(ibm_security_logout),它按照以下doc中的说明实现。注销后,我看到JSESSIONSID值已更改为J2。所以我确实看到JSESSIONID无效并且创建了新的。
唯一的区别是,我看到我们的场景之间可能是我们如何使会话无效。你下次可以以其他用户身份登录吗?如果会话没有失效,则以不同的用户(例如user2)登录将导致异常,因为会话仍将由前一个用户(例如user1)拥有。
答案 2 :(得分:0)
尝试在httpSession中将idReuse设置为false。