PHP cookie值未从一个页面传递到另一个页面

时间:2014-10-07 08:30:40

标签: php cookies setcookie

这是在一个名为headersessioncookie.php

的页面中
<?php
  session_start();
    if ( ! isset (  $_SESSION['loggedin'] ) ) {
      $_SESSION['loggedin'] = FALSE;
    }

  $expiry = time()+60*60*9000;
  setcookie('cookie[loggedin]', '', $expiry, "", "", "", TRUE);

  if ( ! isset (  $_COOKIE['cookie[loggedin]'] ) ) {
    $_COOKIE['cookie[loggedin]'] = FALSE;
  }

?>

这是在名为test.php

的页面中
<?php
  require_once('headersessioncookie.php'); //start session and cookie

  $_SESSION['loggedin'] = TRUE;
  $_COOKIE['cookie[loggedin]'] = TRUE;

?>

当我运行test.php然后运行下面名为test1.php ...

的页面时
<?php
  require_once('headersessioncookie.php'); //start session and cookie

  echo "sessionvalue" . $_SESSION['loggedin'] . '<br>';
  echo "cookievalue" . $_COOKIE['cookie[loggedin]'] . '<br>';

?>

......我得到了

sessionvalue1
cookievalue

为什么我不能......

sessionvalue1
cookievalue1

... ...

3 个答案:

答案 0 :(得分:1)

超全局变量 $ _ COOKIE 仅包含cookie值。如果修改此值,则不会影响cookie,因为您需要将标头发送到浏览器才能这样做。

如果您需要修改它,则必须使用setCookie方法,因为这会发送带有新值的标头。

注意请注意,刷新页面后,只有在使用 setCookie 后才会更新 $ _ COOKIE

答案 1 :(得分:1)

所以这应该有效:

文件:headersessioncookie.php

<?php

    //Session
    session_start();

    if ( !isset($_SESSION['loggedin']) )
        $_SESSION['loggedin'] = FALSE;

    //Cookie
    $expiry = time()+60*60*9000;

    if ( !isset($_COOKIE['cookieloggedin']) )
        setcookie('cookieloggedin', '', $expiry, "", "", true);

?>

文件:test.php

<?php
  require_once('headersessioncookie.php'); //start session and cookie

  $_SESSION['loggedin'] = TRUE;
  setcookie('cookieloggedin', '1', $expiry, "", "", true);

?>

文件:test1.php

<?php
  require_once('headersessioncookie.php'); //start session and cookie

  echo "sessionvalue" . $_SESSION['loggedin'] . '<br>';
  echo "cookievalue" . $_COOKIE['cookieloggedin'] . '<br>';

?>

请注意:

- 如何更新Cookie:https://stackoverflow.com/a/6487597/3933332

- Cookie案例敏感:https://stackoverflow.com/a/11312272/3933332

答案 2 :(得分:0)

回答我自己的问题。事实证明我的代码存在3个主要问题。

1)我试图通过这样做来设置cookie值:

$_COOKIE['cookie[loggedin]'] = FALSE;

原来需要使用setcookie()来设置cookie值。为$_COOKIE分配新值将更改该变量的值(在同一页面的范围内),但不会更改cookie内的值(在该页面范围之外,调用{{1}将产生存储在cookie中的值。)

2)以下内容不正确

$_COOKIE

相反它应该是

echo "cookievalue" . $_COOKIE['cookie[loggedin]'] . '<br>';

3)Cookie必须传递一个字符串值。我试图传递一个不是字符串的值= echo "cookievalue" . $_COOKIE['cookie']['loggedin'] . '<br>'; 。相反,我可以正确传递值= FALSE