【问题标题】:PHP cookie value not being passed from one page to anotherPHP cookie 值没有从一个页面传递到另一个页面
【发布时间】:2014-12-01 15:05:23
【问题描述】:

这是在一个名为 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

...??

【问题讨论】:

  • 参数 6 是一个布尔值,您将其用作字符串,因此将您的 sting"" 更改为 true 或 false!此外,如果您只调用 test1.php,那么您的 cookie 不会设置为 1!

标签: php cookies setcookie


【解决方案1】:

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

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

注意请记住,$_COOKIE只有在刷新页面时使用setCookie后才会更新。

【讨论】:

  • 如果我第一次做 setcookie('cookie[loggedin]', '', $expiry, "", "", TRUE);然后在未来我只做类似 setcookie('cookie[loggedin]', 'cookievalue'); ...那么 $expiry 和 secure=TRUE 会自动从第一条语句中填写吗?
  • 每次调用 setcookie 时,都会通过 headers 发送 cookie。这意味着用新的替换旧的cookie。我想如果你想保留 $expire 和 secure=TRUE 你应该再次发送它
【解决方案2】:

所以这应该有效:

文件: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

【讨论】:

    【解决方案3】:

    回答我自己的问题。结果发现我的代码存在 3 个主要问题。

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

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

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

    2) 以下不正确

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

    应该是

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

    3) Cookie 必须传递一个字符串值。我试图传递一个不是字符串的值 = FALSE。相反,我可以正确传递一个值 = 'FALSE'

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 2011-04-26
      相关资源
      最近更新 更多