1

我希望 cookie 在用户会话过期时过期。它可以是纯javascript,XPages-SSJS。

4

3 回答 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 回答