4

所以我宁愿不为此使用 JS/jQuery - 但我似乎无法让它工作。

我有一个链接<a href="?hideupdates=hide">Hide Updates</a>,我试图用它来设置一个 cookie。

if($_GET['hideupdates'] == 'hide'){
    setcookie("HideUpdates", "hide", time()+60*60*24*5, "/", $vars->networkSite);
}

它“有效”,但我必须点击链接两次。


从“ site.com ”我可以var_dump()得到 cookie,它就出现了NULL

现在我点击链接并转到“ site.com?hideupdates=hide”,cookie仍然出现NULL

但是,当我再次单击该链接时,从“ site.com?hideupdates=hide ” - THEN cookie 又回来了hide

我错过了什么吗?还是我“必须”为此使用 JS/jQuery?

4

3 回答 3

8

setcookie不影响当前请求。为此,您还需要手动设置相关$_COOKIE变量:

setcookie("HideUpdates",$_COOKIE['HideUpdates'] = "hide", time()+60*60*24*5, "/", $vars->networkSite);
于 2013-01-16T20:04:37.307 回答
3

唯一的方法是 JS 或 jQuery,因为正如其他人所说,cookie 不会影响当前页面请求。

您需要用于 jQuery 解决方案的jQuery cookie 插件部分服务器 jquery.cookie.js 有问题(解决方法是重命名文件 Eg: jquery.cook.js)

jquery cookie插件的使用

创建会话 cookie:

 $.cookie('the_cookie', 'the_value');

创建过期 cookie,从那时起 7 天:

 $.cookie('the_cookie', 'the_value', { expires: 7 });

创建过期 cookie,在整个站点中有效:

 $.cookie('the_cookie', 'the_value', { expires: 7, path: '/' });

读取 cookie:

 $.cookie('the_cookie'); // => "the_value"
 $.cookie('not_existing'); // => undefined

阅读所有可用的 cookie:

 $.cookie(); // => { "the_cookie": "the_value", "...remaining": "cookies" }

删除 cookie:

 // Returns true when cookie was found, false when no cookie was found...
 $.removeCookie('the_cookie');

// 与写入 cookie 时相同的路径...

 $.removeCookie('the_cookie', { path: '/' });

你可以试试localStorage。它适用于 Chrome、FF 和 IE9 及更高版本。我们不支持 IE7-10!万岁!

IE8 的 localStorage 存在一些问题。

脚本必须在 $(document).ready(function() {});

$(document).ready(function() {
   $("#btnClick").click(function(e) {
      e.preventDefault();
      localStorage.setItem('cookieName', 'cookie_value');
  window.href.location = "your_new_page.php";   
   });


   //On the same page or other page

   if (localStorage.getItem('cookieName')){
      //do here what you want


   }else{
      //do something else

   }

});
于 2014-01-18T20:19:45.037 回答
1

Cookie 直到设置好并发送新的页面请求后才会启动。这是因为 cookie 是与页面请求一起发送的,它们只是不会神奇地出现在服务器上。

您的解决方案是在设置 cookie 后进行页面刷新。

于 2013-01-16T20:04:16.963 回答