Cookie行为似乎延迟了1页

时间:2012-01-24 19:13:26

标签: php cookies setcookie

我想我知道答案(我是S.O.L.),但我想我会发布问题,看看是否有人有任何建议。

我们有一个有城市的网站。我们正在尝试使用cookie来“记住”用户访问过的当前/最后一个城市,但我们没有得到我们想要的行为。 Cookie始终延迟1页(此处列出的常见陷阱:http://php.net/manual/en/function.setcookie.php

假设您转到以下网址:site.com/dallas 然后,您转到URL:site.com/chicago

在<之前设置cookie。头>像这样:

$location = 'Chicago';
setcookie("location", $cookie_loc, time()+31536000, "/"); 

在页面上检索cookie,如下所示:

<?php
if(isset($_COOKIE["location"])) {
  echo 'Current City '.$_COOKIE["location"] ;
} else {
  echo 'Current City: none';
}
?>

然而,在“芝加哥”页面上,它显示了已设置的“达拉斯”Cookie,即使新Cookie设置为“芝加哥”

显然,cookie在被重置之前被拉下来。

是否有一种已知的方法来纠正这种情况,以便在不刷新页面的情况下也可以获取通过转到页面设置的cookie?

我的直觉说不,但这是我认为可能的常见问题......

谢谢!

4 个答案:

答案 0 :(得分:0)

您可以自己在超全球中设置它:

$cookie_loc = 'Chicago';
setcookie("location", $cookie_loc, time()+31536000, "/"); 
$_COOKIE['location'] = $cookie_loc;

答案 1 :(得分:0)

为什么每次拨打$_COOKIE时都不设置setcookie变量?

$location = 'Chicago';
setcookie("location", $cookie_loc, time()+31536000, "/"); 
$_COOKIE['location'] = $location; // not sure what $cookie_loc is

答案 2 :(得分:0)

如果您在页面中设置了Cookie,则该页面中不会显示该Cookie。 但是,如果您在该页面中设置了一个位置,则可以从该变量中检索它!

if (!isset($location) && isset($_COOKIE["location"]))
{
    $location = $_COOKIE["location"];
}

echo 'Current City '. $location;

如果$location变量未在开头设置,则会从Cookie中检索,否则代码会使用该变量。 :)

答案 3 :(得分:0)

在您的情况下,您还可以使用一些JavaScript代码在页面加载之前设置Cookie

<a href="./probably_same_php_page.php" onclick="document.cookie='location=' + this.innerHTML">Chicago</a>