Cookie不适用于整个网站

时间:2014-07-25 00:07:26

标签: php cookies session-cookies

我在设置和检索Cookie时遇到两个问题。

  1. Cookie已加载但在刷新页面之前无法调用。这意味着cookie会显示在开发人员工具中,但不会在尝试在页面上使用其值时显示。刷新后,该值似乎可以在页面上使用。
  2. Cookie不适用于整个域和子目录。例如,如果用户在http://example.com/sub/处输入http://example.com/,则Cookie将被销毁。
  3. 这是我的代码:

    $ad_source = $_GET['source'];
    $date_of_expiry = time() + (86400 * 7);
    setcookie('ad_source',$ad_source,$date_of_expiry,'/');
    
    if ( $_COOKIE['ad_source'] == 'adwords_campaign_01' ) {
        echo '... do something';
    } elseif ( $_COOKIE['ad_source'] == 'adwords_campaign_02' ) {
        echo '... do something else';
    }
    

    我试图通过确定用户点击的adwords广告系列,在整个网站上显示不同的信息。

    我通常不会使用Cookie而更喜欢设置会话,但在这种情况下,我希望能够在更长的时间内跟踪来源。

1 个答案:

答案 0 :(得分:0)

现在一切都按预期工作了。在这篇文章中,一些关于cookie的更有见地的信息帮助了很多。

PHP cookie set in second refresh page

  1. 设置Cookie后将用户重定向到页面。来自浏览器的第二个请求发送cookie,服务器返回相对于其值的信息。

  2. 在创建Cookie之前检查$ ad_source是否已设置。

  3. 更新的代码:

    $ad_source = $_GET['source'];
    $date_of_expiry = time() + (86400 * 7);
    
    if ( $ad_source ) {
    
      setcookie('ad_source',$ad_source,$date_of_expiry,'/','example.com');
    
      if ( $_COOKIE['ad_source'] == 'adwords_campaign_01' ) {
        header( 'Location: http://example.com/' );
        echo '... do something';
      } elseif ( $_COOKIE['ad_source'] == 'adwords_campaign_02' ) {
        header( 'Location: http://example.com/' );
        echo '... do something else';
      }
    
    }