jQuery cookie 是不是可以像会话变量一样过期?

Posted

技术标签:

【中文标题】jQuery cookie 是不是可以像会话变量一样过期?【英文标题】:Is it possible for jQuery cookies to expire like session variables?jQuery cookie 是否可以像会话变量一样过期? 【发布时间】:2013-10-07 17:16:48 【问题描述】:

我知道这个问题已经被问过一千次了,但没有一个答案能真正给出我想要的答案。我正在使用jQuery cookie 存储一些信息,但我希望它们在浏览器关闭时过期。 window.unload 不是一个可行的选择(阅读:不起作用。)

我的问题是:真的有可能在浏览器关闭时将 cookie 设置为过期,就像会话一样?如果是这样,有人知道怎么做吗?

更新: 事实证明这很简单,而不是传递 expiry: 0 (这不起作用),只是根本不传递任何过期时间。嗯,这就解释了为什么没有很多问题。

谢谢大家。

【问题讨论】:

HTTP 必须发送到期日期。如果发送正确的日期,请检查 RFC 和实现。 (必须是过去。) 【参考方案1】:

事实证明这很简单,而不是通过 expiry: 0 (这不起作用),只是根本不通过任何到期时间。嗯,这就解释了为什么没有很多问题。

所以不要像这样使用标志传递过期时间:

$.cookie(key, value,  expiry: 0, domain: '', path: '' );

你只是省略了到期值:

$.cookie(key, value,  domain: '', path: '' );

而且它有效。这么简单的事情,让我很困惑。

不过还是谢谢!

【讨论】:

【参考方案2】:

在RFC 2965 specification 中是可能的。也就是说,如果您在 cookie 处理代码中设置“Discard”属性并且如果浏览器支持它,那么它是可能的。

也就是说:jQuery cookie 不支持 Discard 属性。您必须像这样扩展jQuery-Cookie 代码(大约是原始文件中的第 57 行):

        return (document.cookie = [
            config.raw ? key : encodeURIComponent(key),
            '=',
            config.raw ? value : encodeURIComponent(value),
            options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
            options.path    ? '; path=' + options.path : '',
            options.domain  ? '; domain=' + options.domain : '',
                            options.discard ? '; Discard=' + options.discard : '',
            options.secure  ? '; secure' : ''
        ].join(''));

【讨论】:

【参考方案3】:

如果您使用这样的默认设置

 $.cookie.defaults =  path: '/', expires: 365 ;

那么你需要为每个cookie值使用以下属性

$.cookie(key, value,  expires: null );

【讨论】:

以上是关于jQuery cookie 是不是可以像会话变量一样过期?的主要内容,如果未能解决你的问题,请参考以下文章

Flask - 像使用 cookie 一样将会话数据保存在数据库中

jQuery Cookie 插件行为:如果 cookie 是会话 cookie,则将域设置为“.com”

为啥 jQuery 的 .ajax() 方法不发送我的会话 cookie?

如何检查用户是不是通过 Laravel 上的 cookie 会话进行身份验证?

如何使用 JQUERY 读取 SESSION 变量

AWS ELB 负载均衡器:是不是可以设置多个会话 cookie?