2014-10-07 91 views
0

这在一个页面调用headersessioncookie.phpPHP cookie值不是从一个页面传递到另一个

<?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; 

?> 

当我运行测试.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 

...?

+0

参数6是一个布尔值,并将它用作字符串,因此将您的刺“”更改为true或false!此外,如果你只调用test1.php,那么你的cookie不会被设置为1! – Rizier123 2014-10-07 08:38:45

回答

0

回答我的问题。原来我的代码有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)饼干必须具有要传递的字符串值。我试图通过一个值不是字符串的值= FALSE。相反,我本可以正确地通过一个值= 'FALSE'

1

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

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

注意记住$ _COOKIE只将使用后setCookie方法当你刷新页面更新。

+0

如果我第一次做setcookie('cookie [loggedin]','',$ expiry,“”,“”,TRUE);然后在将来我只会做一些像setcookie('cookie [loggedin]','cookievalue'); ...那么$ expiry和secure = TRUE会自动从第一条语句中填入? – 2014-10-07 09:02:12

+0

每次您打电话给setcookie时,您都会通过标头发送Cookie。这意味着旧的饼干替换为新的饼干。我猜如果你想保持$ expire和secure = TRUE,你应该再次发送它 – Miguel 2014-10-07 12:31:47

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

-is一个Cookie区分大小写:https://stackoverflow.com/a/11312272/3933332

相关问题