【问题标题】:Get A Cookie to Not Expire While Page is Open, But Last 1 Hour When It's Closed让 Cookie 在页面打开时不会过期,但在页面关闭时会持续 1 小时
【发布时间】:2014-01-24 09:04:08
【问题描述】:

我有一个显示从 cookie 读取的数据的页面。 cookie 在一个小时后过期。通常,用户将导航到该页面并使其保持打开状态。当他们稍后返回时,cookie 已过期,页面上的数据不再相关。

谁能建议我如何将 cookie 的过期时间设置为持续会话的长度?

作为参考,这是我用来设置 cookie 的代码(我从我们拥有的另一个项目中提取了它,而这可能又是从这个站点提取的!:-)

function setCookie(value)
{
    var today = new Date();
    today.setTime(today.getTime());
    var expires = 30 * 1000 * 60;

    var c_name = 'CompareFundIds';
    var exdate = new Date(today.getTime() + (expires));
    document.cookie = c_name + "=" + value + ";expires=" + exdate.toGMTString();
}

【问题讨论】:

    标签: cookies


    【解决方案1】:

    您的标题和文字似乎陈述了两种不同的要求:

    1. cookie 必须保持有效,直到浏览器关闭,然后消失
    2. cookie 必须在浏览器关闭之前保持有效,然后再保持有效一小时,然后消失

    1) 如果您根本没有为 cookie 设置“过期”值,则将起作用:

    // Set cookie until browser is closed
    document.cookie = c_name + "=" + value;
    

    2) 如果您让 setCookie 函数在页面打开时重复运行(例如每分钟),则将起作用:

    // Set cookie every minute
    var value = ...;
    window.setInterval(function () {
        setCookie(value);
    }, 60 * 1000);
    

    当浏览器关闭时,cookie 永远不会超过 1 分钟,因此有效期会再延长一小时。

    【讨论】:

    • 谢谢@Martin,这成功了。作为参考,第二种情况是我想要的。
    【解决方案2】:

    谁能建议我如何将 cookie 的过期时间设置为持续会话的长度?

    据我所知,这是不可能的。

    你可以做的是改变你的服务器逻辑。镜像会话和 cookie 中的值。首先从会话中读取,如果它不存在,则回退到 cookie。这应该可以解决问题。

    【讨论】:

    • 依赖 JavaScript 未被关闭总是一个糟糕的解决方案。
    • 天哪。有多少大胡子极客使用 noscript?有多少人在禁用 javascript 的情况下使用 Links/Elinks/Lynx/一些晦涩的东西?其中有多少对提问者很重要?而且,正如您所说,如果您愿意,可以为他们或使用服务器端代码的蜘蛛/机器人提供一种解决方案。这与“不可能”相去甚远。
    【解决方案3】:

    也许您可以使用 Ajax 调用 PHP 文件以在服务器端保持会话活动?

    【讨论】:

      【解决方案4】:

      这不能使用 onUnload / onClose javascript 事件吗?理想情况下,您可以在页面加载时设置一些行为,然后在页面卸载时设置另一个行为。当然,并非所有浏览器都支持 onClose,但我看到 jQuery 确实支持 onunload 方法。

      参考资料:

      【讨论】:

        猜你喜欢
        • 2014-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-14
        • 2011-07-09
        • 2014-03-11
        • 2019-01-01
        相关资源
        最近更新 更多