会话失效后,Websphere Liberty Profile会重用JSESSIONID

时间:2017-02-18 10:50:21

标签: websphere-liberty jsessionid invalidation

我在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更顽固。请建议。

3 个答案:

答案 0 :(得分:0)

JSESSIONID cookie可以由客户端指定。如果不是这样,可能是由于cookie保留或从浏览器缓存。尝试从客户端清除cookie。

Request.getRequestedSessionId()应该能够验证它:

https://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpServletRequest.html#getRequestedSessionId%28%29

答案 1 :(得分:0)

我试图在WebSphere Liberty服务器上运行涉及表单登录和注销的Web应用程序中查找JSESSIONID行为。

1)当显示登录页面时,存在JSESSIONID cookie,让我们说ID为J1。使用有效的用户/密码登录后,JSESSIONID按预期保留J1。

2)然后我做了logout(ibm_security_logout),它按照以下doc中的说明实现。注销后,我看到JSESSIONSID值已更改为J2。所以我确实看到JSESSIONID无效并且创建了新的。

https://www.ibm.com/support/knowledgecenter/SS7K4U_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/tsec_pofolo.html

唯一的区别是,我看到我们的场景之间可能是我们如何使会话无效。你下次可以以其他用户身份登录吗?如果会话没有失效,则以不同的用户(例如user2)登录将导致异常,因为会话仍将由前一个用户(例如user1)拥有。

答案 2 :(得分:0)

尝试在httpSession中将idReuse设置为false。