jQuery:关闭浏览器时删除cookie(会话cookie)

时间:2013-08-07 18:52:46

标签: javascript jquery cookies

这听起来很简单,我认为它应该很简单,但不知怎的,我不能让它起作用......

我想使用Javascript设置Cookie,当用户退出浏览器时,应删除此Cookie。设置cookie并获取值不是问题。但是当我退出浏览器并重新打开它时,cookie仍然存在(Firefox)。

我使用jQuery和Cookie-Plugin

这是我的测试代码:

$(document).ready(function(){
$('#output').append( '<li>initialize...</li>' );

var $cookieVal = $.cookie('testCookie');

$('#output').append( '<li>check cookie...</li>' );

if(!$cookieVal) {
    $('#output').append( '<li>set cookie...</li>' );
    $.cookie('testCookie', 'eat cookies', { path: '/' });
    //console.log( $.cookie() );
} else {
    $('#output').append( '<li>cookie is already set...</li>' );
    $('#output').append( '<li>cookie value: '+$.cookie('testCookie')+'</li>' );
}
});

请在jsFiddle找到工作示例。

2 个答案:

答案 0 :(得分:1)

有一些代码对我有用。它应该在您关闭浏览器时到期,因为到期日期即将到期:

    var vEnd = new Date();
    vEnd.setDate(vEnd.getDate() - 1);
    var endOfCookieText = "; expires=" + vEnd.toGMTString() + ";  path=/";
    document.cookie = escape('testCookie') + "=" + escape("eat cookies") + endOfCookieText;

FIDDLE MODIFIED

请注意,小提琴为我提供了一堆加载错误。

答案 1 :(得分:1)

我开始怀疑你的测试方法是否可能成为问题。所以,我将以特定的方式写这个。

实际答案:浏览器设置

在Firefox中,选项&gt;常规&gt;当Firefox启动时&gt;“从上次显示我的窗口和标签页”将保留您之前的会话。更改此设置,以确保它确实按预期工作。 Firefox正在延长你的会话时间。有关详细信息,请参阅此“错误”:http://bugzilla.mozilla.org/show_bug.cgi?id=530594

大多数浏览器中的类似设置可能表现相同。

<小时/>

原始答案:

我创建了一个小提琴,http://jsfiddle.net/8Ahg2/使用document.cookie而不是jquery cookie插件。这是你如何测试这个。 (来源见下文)

  1. 将以下网址复制到剪贴板:http://fiddle.jshell.net/8Ahg2/show/
  2. 完全关闭您选择的浏览器 - 这应该与浏览器无关。
  3. 打开浏览器,粘贴网址。第一次应该说:check cookie... set cookie...
  4. 刷新页面,注意它现在应该说出cookie的值(“test”)
  5. 再次关闭浏览器
  6. 导航到应该仍在剪贴板中的网址。在第一个视图中 *不刷新页面,它应该再次说'check cookie... set cookie...'
  7. <小时/>

    JS

    $(document).ready(function () {
        $('#output').append('<li>initialize...</li>');
        //this regex gets the "name" cookie out of the string of cookies that look like this: "name=test;var2=hello;var3=world"
        var cookieVal = document.cookie.replace(/(?:(?:^|.*;\s*)name\s*\=\s*([^;]*).*$)|^.*$/, "$1");
    
        $('#output').append('<li>check cookie...</li>');
    
        if (!cookieVal) {
            $('#output').append('<li>set cookie...</li>');
            document.cookie = "name=test";
        } else {
            $('#output').append('<li>cookie is already set...</li>');
            $('#output').append('<li>cookie value: ' + cookieVal + '</li>');
        }
    });