【问题标题】:Cookie Not Available SitewideCookie 在全站范围内不可用
【发布时间】:2014-07-26 02:08:38
【问题描述】:

我在设置和检索 cookie 方面遇到了两个问题。

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

这是我的代码:

$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';
}

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

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

【问题讨论】:

  • 对于第一点,在脚本的开头,尝试将 ini_set('display_errors', false); error_reporting(0),这是来自它所说的文档页面(必须在脚本的任何输出之前发送 cookie)。对于第二点,尽量使用第五个参数,在函数的doc页面中也提到过。
  • 错误报告没有显示任何内容。我也尝试将域添加为第五个参数,但没有任何区别。发生了同样的结果。
  • 我通过在设置 cookie 之前首先检查 $ad_source 来解决问题 2。 if ( $ad_source ) { setcookie('ad_source',$ad_source,$date_of_expiry,'/');}

标签: php cookies session-cookies


【解决方案1】:

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

PHP cookie set in second refresh page

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

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

更新后的代码:

$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';
  }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 2012-12-03
    • 2012-02-19
    • 2015-12-09
    • 1970-01-01
    • 2015-05-03
    • 2013-08-18
    相关资源
    最近更新 更多