在localhost上设置WordPress中的Cookie

时间:2012-04-02 12:19:09

标签: php wordpress setcookie

我在WordPress安装中设置cookie时遇到了一些麻烦。

这是我的代码:

function write_cookies() {
    setcookie("category", get_query_var('cat'), time() + 3600 * 24, COOKIEPATH, '', false);
    print($_COOKIE["category"]);
}
add_action('init', 'write_cookies');

理论上,这应该输出categoryId,但似乎没有任何效果。

我在localhost上读到了这一点,因为cookie域工作时提供了一个空字符串,但我无法获得任何类型的输出。我还尝试了'localhost''.localhost''127.0.0.1'falseNULL作为域名。 COOKIEPATH常量当前输出'/'

我正在通过Chrome阅读Cookie,并且页面上的Cookie似乎没有任何变化。

更新

到目前为止,感谢您的答案,我将解释为什么在这种情况下我需要cookie ...

基本上,在我的帖子页面上,我希望显示同一类别中的其他帖子。对于具有多个类别的人来说,这意味着存储用户到达帖子的路线。我将给出一个真实世界的例子:

用户将从首页导航至行业新闻,发布题为“制造业新资金重新激励当地政治家”的文章。现在,在本节的其他帖子中,我想展示行业新闻的帖子,但由于有关的特定帖子是在行业新闻和政治新闻下设置的,我如何判断采取了哪条路线?

在第一个实例中,这被设置为分析wp_get_referer()以确定在帖子之前出现的类别。但是,如果我然后使用此其他帖子部分转到一个名为“制造业新区域发展”的帖子,该帖子被归类为行业新闻和区域新闻,则wp_get_referer会返回上一篇文章,而不是我逻辑中所需的类别

我的解决方案是(在访问类别页面时)存储类别的ID,并在将来的所有逻辑中使用它来确定要在“其他帖子”部分中显示的正确类别。

令人困惑,我知道,但我在设计和客户需求方面都受限于提供这一特定流程。

根据建议,我已更新我的代码以显示:

function write_cookies() {
    setcookie("category", get_query_var('cat'), false, '/', str_replace('http://www','',get_bloginfo('url')));
    print('test: '.$_COOKIE["category"]);
}
add_action('init', 'write_cookies');

这会在没有打印cookie的情况下输出test:

3 个答案:

答案 0 :(得分:1)

我会让wordpress使用类似str_replace('http://www','',get_bloginfo('url'))之类的东西为我找出合适的域名。那就是wordpress默认类别是不够的。

一般来说,使用Wordpress默认类别和标记结构远比原始cookie更好。那又为什么你需要一个cookie?

答案 1 :(得分:1)

Chrome有一个已知的限制

http://code.google.com/p/chromium/issues/detail?id=56211

您无法设置/访问http://localhost Cookie。 Chrome中的奇怪问题。

答案 2 :(得分:0)

我在非WordPress安装上测试了各种Cookie域,我发现在localhost环境中,唯一成功设置变量的域是'',即空字符串。

现在是我的代码:

function write_cookies() {    
    setcookie("category", get_query_var('cat'), false, '/', '',false);
}

我也调整了它,因此它是在post循环中调用的,而不是来自'init'事件,这使我可以访问相当多的变量来设置到cookie而不是init事件。