【问题标题】:jQuery change cookie expiry from time value to session valuejQuery将cookie过期时间从时间值更改为会话值
【发布时间】:2012-03-06 15:43:30
【问题描述】:

我完全不知道 cookie...

我在我的网站上使用 Slidedeck,它们提供了一个代码,使返回到带有 slidedeck 的页面的人能够显示最后查看的幻灯片,而不是返回到开头。

但是它设置为一周 - 我想做的是将其更改为基于会话,以便当浏览器关闭时,cookie 不再有效。这个脚本可以吗?

我了解到,如果您将到期时间更改为 0,它将使其基于会话 - 所以我进行了更改:

else {
      var expires = "0";
    }

但由于上面的 if 语句,我认为这不起作用。

// The default slide to start on is 0.
  var startingSlide = 0;
  // If we find a cookie with the name that we previously saved, use it.
  if(readCookie('slideDeckDemoCurrentSlide')){
    // This overrides the default value of 0 if we find a cookie.
    startingSlide = readCookie('slideDeckDemoCurrentSlide');
  }
  var myDeck = $('.slidedeck').slidedeck({
    autoPlay: false,
    cycle: true,
    slideTransition: 'slide',
    touch: false,
    hideSpines: true,
    start: startingSlide, // tell the Deck where to start
    complete: function(deck){
      // Here we will set a cookie for one week.
      // This cookie will store the deck.current value.
      //createCookie(name,value,days)
      createCookie('slideDeckDemoCurrentSlide',deck.current,7)
    }
  });




  function createCookie(name,value,days) {
    if (days) {
      var date = new Date();
      date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
      var expires = "; expires=" + date.toGMTString();
    }
    else {
      var expires = "";
    }
    document.cookie = name+"="+value+expires+"; path=/";
  }

  function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
      var c = ca[i];
      while (c.charAt(0)===' '){ c = c.substring(1,c.length); }
      if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
  }

  function eraseCookie(name) {
    createCookie(name,"",-1);
  }  

【问题讨论】:

  • 会话是基于服务器的,jQuery 是基于客户端的。你的服务器软件是什么? php? ASP?
  • 另外不要忘记关闭浏览器不一定会关闭会话。
  • 我的无知暴露无遗。服务器端是 ASP - 但我需要坚持使用 jQuery 并将其合并到这个脚本中。

标签: jquery cookies session-cookies


【解决方案1】:

会话 Cookie 和浏览器 Cookie 没有任何共同之处。特别是 Javascript 在客户端上执行,因此您只能访问浏览器 cookie。您可以使用.unload() 检测浏览器是否关闭或页面是否关闭,然后删除cookie:

$(window).unload( function () { //delete cookie } );

【讨论】:

  • 那么我会将它添加到脚本的末尾还是开头? $(window).unload( function () { eraseCookie(name) { createCookie(name,"",-1); } } );
  • 我会将它添加到 $(document).ready(function(){}) 部分,但放在哪里并没有真正的区别!
  • 一旦他们离开带有卸载功能的页面,它就会杀死cookie。我想我需要查看 jquery cookies 插件并尝试重写提供的脚本...
  • 是的,有一个很好的 jquery cookie 插件。删除 cookie 的其他方法是将过期日期设置为超出实际日期(如 1.1.1990),这将使其无效并且浏览器将其删除。如果这个回答对你有帮助,请接受或点赞
【解决方案2】:

如果您想创建会话 cookie,请不要使用 expires 选项。 这是来自“jquery cookie”的官方文档:

定义 cookie 的生命周期。值可以是一个数字,它将是 解释为从创建或 Date 对象开始的天数。如果 省略,cookie 成为会话 cookie。

如果你设置了 expires : 0 ,那么这意味着cookie根本不会被保存。

【讨论】:

    猜你喜欢
    • 2011-03-01
    • 2023-03-27
    • 2014-05-03
    • 1970-01-01
    • 2011-05-07
    • 2015-07-17
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多