【问题标题】:Can't set PHP cookie on the same page无法在同一页面上设置 PHP cookie
【发布时间】:2013-04-07 06:17:50
【问题描述】:

我在同一页面上设置 cookie 时遇到问题。我在我的网站上使用了 cookie,它工作正常,我倾向于将 php 设置在单独的文件中。现在,我在同一页面上设置了一个 cookie,但它似乎不起作用。

$expire = time()+5;
setcookie("rb_vote", 1, $expire);

然后检查是否设置

if(isset($_COOKIE["rb_vote"]))  {
echo "IS SET";}
else {
echo "IS NOT SET"; }

它总是说未设置。我尝试在页面加载中执行此操作,但仍然无法正常工作。

【问题讨论】:

  • 正如@Pekka 所说:Cookie 是在页面请求中从浏览器发送的。所以它们只会在 setcookie() 之后的下一个请求中出现在 $_COOKIE 中。

标签: php cookies


【解决方案1】:

manual on setcookie()(强调我的):

一旦设置了 cookie,就可以使用 $_COOKIE 或 $HTTP_COOKIE_VARS 数组在下一页加载访问它们。注意,像 $_COOKIE 这样的超全局变量在 PHP 4.1.0 中可用。 Cookie 值也存在于 $_REQUEST

Here 是一个解决方法建议。它是不完美的,因为它不能保证 cookie 确实被设置,但在你的情况下可能会这样做。

【讨论】:

【解决方案2】:

我刚刚在原版论坛遇到了这个问题。在第一个页面加载时,在建立会话之前,会创建一个会话 cookie,但是每次应用程序想要访问会话变量(以添加到它们)时,它都会在 $_COOKIE 中查找当前会话 ID,即直到下一个页面加载才设置。

我的解决方法是在创建 cookie 时手动设置 $_COOKIE 元素。

// Create a cookie to identify the session.
// This line already exists. $Name is the cookie name.
// $SessionID is a random md5 ID that has just been generated.
setcookie($Name, $SessionID, $Expire, $Path, $Domain);

// Set the cookie for the remainder of the page. This is a workaround.
if (!isset($_COOKIE[$Name])) $_COOKIE[$Name] = $SessionID;

我已将此作为 Vanilla (https://github.com/vanillaforums/Garden/issues/1568) 的问题提出,因为这种解决方法感觉有点像 hack,但它现在肯定可以解决问题。

PHP5.3 原版论坛版本 2.0.18.4

【讨论】:

  • 这是天才,因为它完全解决了“cookie 无法在它设置的页面上准备好”的问题。干得好!
猜你喜欢
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
相关资源
最近更新 更多