【问题标题】:losing cookie when going from page to page从一个页面到另一个页面时丢失 cookie
【发布时间】:2013-04-26 22:00:48
【问题描述】:

从一个页面到另一个页面时,我似乎丢失了 cookie 信息。

我在 header.php 文件中生成了一个 cookie,然后将其包含在其他页面中。如果我刷新一个页面,cookie 会创建一个新页面。但是,当我转到新页面时,会生成一个新的 cookie。

我的标头中有 getCookie(),然后在需要使用时在站点的其余部分使用 $cookieID。

这是我用来检查cookie是否已经存在以及如果不存在则生成cookie的函数

function getCookie() {
    if(isset($_COOKIE['ID'])){
        $cookieID = $_COOKIE['ID'];
    }
    else{
        //generate random value for cookie id
        $charid = strtoupper(md5(uniqid(rand(), true)));
        $uuid =  substr($charid, 0, 8)
                 .substr($charid,20,12);

        setcookie( "ID", $uuid, time()+604800 ); // 7 days
        $cookieID = $_COOKIE['ID'];
            //need to refresh the page to get the new cookie ID
        echo "<META HTTP-EQUIV='Refresh' CONTENT='0'>  ";
    }
    return $cookieID;
}

【问题讨论】:

  • 在else语句中,不需要设置$cookieID等于$uuid吗? $_COOKIE['ID']不是在那个时候设置的吗?
  • 您可能需要考虑您的代码对禁用 cookie 的用户做了什么 - 根据调用此函数的位置,他们可能会陷入无限刷新循环。

标签: php cookies setcookie


【解决方案1】:

如果您的站点不在某个子目录中,您应该将setcookie() 调用中的路径参数设置为例如/

setcookie('ID', $uuid, time() + 604900, '/');

还要注意在您的网站的任何地方使用相同的域名,否则当没有 www 的 example.com 上没有为 www.example.com 设置的 cookie 时,可能会出现一些混乱em> 子域。

【讨论】:

  • 太棒了!我有一个子目录中的网站,这已经解决了这个问题。谢谢
【解决方案2】:

试试下面的;

setcookie( "ID", $uuid, time()+604800, '/');

这会将域设置为 root,因此应该适用于您的整个网站。

此外,如果您在 example.com 上设置 cookie - 它会自动转移到 sub1.example.com、www.example.com 等,但不幸的是,这不能反过来工作。

【讨论】:

  • 太棒了!我有一个子目录中的网站,这已经解决了这个问题。谢谢
【解决方案3】:

这可能是您的问题,也可能不是,但请确保在您浏览应用时您的域没有发生任何变化。

例如,从 http://www.yourpage.com/page1 转到 http://yourpage.com/page2 会丢失您的 cookie,因为您删除了 www。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-01
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 2017-10-30
    • 1970-01-01
    相关资源
    最近更新 更多