点击打印产生新 jsessionid 的问题

现象:

客户的环境是 win+weblogic10.3.2,使用 ssh 框架,登陆客户的系统后,展现、导出等功能多正常,点击打印按钮后,能出现预览窗口,再进行其他操作就会自动跳转到登陆界面。

使用 HTTPAnalyzer 检查出,cookie 发生变化:

登陆后的 cookie:
Cookie Name Value 
JSESSPPADP fMQpTqmPVQBNSkssZ0zVMvyqKlG0yMvXGMQfbXLJxCQMnn6v82fM!1588576729

点击打印链接: 
Request Headers Value 
(Request-Line) GET /adp/reportServlet?action=1&fileName=LS/LS001_view.raq&srcType=file&paramString=bbglnm%3DB533D1DCD5A49BE28868AE1720B437CB%3Bbbsj%3D2011%3Bjgdm%3D000000000000000 HTTP/1.1

点击打印后的 cookie:
Set-Cookie Name Value Path Domain Expires 
JSESSPPADP n4HGTqnBKM55NjBQc9DVHf9nygpvLxs4sHyQbndYQGjgXfDM16vp!1588576729

解决办法:

在 weblogic.xml 中做如下配置便可:

Xml 代码:

<session-descriptor>

<cookie-http-only>false</cookie-http-only>

</session-descriptor>

问题分析:

这个问题的确是由于 weblogic10.3.2 对 session 的安全管理级别上的特殊性导致,即缺省设置了<cookie- http-only>true</cookie-http-only>。由于这个安全级别导致脚本里或者插件里的请求无法发送 cookie 也给服务器,服务器没收到 sessionid 便重新生成了一个新的 ID 将原有 ID 覆盖。造成一些特殊请求 session 被覆盖丢失的现象。

| cookie-http-only| true | Specifies whether HttpOnly cookies are enabled. When this element is set to true, all session cookies would be unavailable to the browser scripts. The default value is true. Therefore, HttpOnly cookies are enabled by default.|

weblogic10.3.2 缺省值为 true, 修改这个参数必须升级到 weblogic9.2(mp4) 及以上版本。