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

11

我知道这个问题被问了一千次,但是没有一个答案真正给了我想要的。我正在使用jQuery cookie来存储一些信息,但我希望它们在浏览器关闭时过期。window.unload不是可行的选项(即无效)。

我的问题是:是否实际上可以将cookie设置为在浏览器关闭时过期,就像会话一样?如果可以,有人知道如何做吗?

更新:原来很简单,只需不传递任何到期时间(expiry: 0不起作用),这就解释了为什么没有太多问题。

谢谢大家。


1
HTTP必须发送到期日期。检查RFC和实现是否发送正确的日期。(必须是过去的日期。) - schlingel
3个回答

23

原来这很简单,不要传递过期时间: 0(这行不通),干脆就不传过期时间。这就解释了为什么没有太多问题了。

所以不要像下面这样带着标志传递过期时间:

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

你只需要省略到期日期:

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

它起作用了。它是如此简单,以至于我感到困惑。

但无论如何感谢你!


2
这在RFC 2965规范中是可能的。如果设置了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(''));

1
如果您使用默认设置如下:
 $.cookie.defaults = { path: '/', expires: 365 };

那么,您需要为每个cookie值使用以下属性。
$.cookie(key, value, { expires: null });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接