我希望 cookie 在用户会话过期时过期。它可以是纯javascript,XPages-SSJS。
问问题
2941 次
3 回答
1
在每个页面加载时,将 cookie 设置为在当前时间 + 会话长度时过期。
例如,如果您的会话时长为 1 小时,请在页面加载时添加:
var time = new Date().getTime(); // get the current time
time += 3600 * 1000; // add 1 hour to the current time
document.cookie = 'cookiedata=' + cookiedata + '; expires=' + time.toGMTString() + ';';
在此示例中,cookiedata
是您在 cookie 中存储的任何内容。
于 2013-09-10T11:01:55.550 回答
0
此 XSnippet 上的代码可以在 Logout 按钮后面使用。这将清除 8.5.x 服务器的 sessionScope 变量,但不会清除 9.0 服务器: http ://openntf.org/XSnippets.nsf/snippet.xsp?id=clear-session-whole-server
如果要清除 R9 上的 sessionScope 映射,则需要获取映射上的句柄,迭代键并清除它们,如此 XSnippet: http ://openntf.org/XSnippets.nsf/snippet.xsp ?id=clear-session-current-nsf
于 2013-09-10T11:43:29.220 回答
0
以下是如何从服务器端修改会话 cookie 的到期日期的示例:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.beforeRenderResponse>
<![CDATA[#{javascript:var sessionId = facesContext.getExternalContext().getRequest().getSession().getId();
var response = facesContext.getExternalContext().getResponse();
var maxAge = facesContext.getApplication().getApplicationProperty("xsp.session.timeout", "30");
var maxAge = maxAge * 60;
response.addHeader("Set-Cookie","SessionID=" + sessionId + "; path=/; max-age=" + maxAge)}]]>
</xp:this.beforeRenderResponse>
</xp:view>
但请记住,设置 cookie 的过期时间会产生一些副作用,如果您关闭浏览器,cookie 将不会被自动删除。因为 cookie 对整个服务器都有效(路径=/),所以这也会影响在同一路径上运行的其他应用程序。
于 2013-09-10T12:15:14.667 回答