与session / cookie相关的未定义变量

时间:2012-08-26 16:32:47

标签: php

我有一个登录表单,允​​许持久登录和常规会话。简而言之,当用户在他们的帐户中时,他们可以更改密码,电子邮件和内容。但为此,我需要首先从他们的会话或cookie中获取他们的用户名(所以我可以进行正确的SQL查询)。

我尝试使用此代码执行此操作:

if(isset($_SESSION['username']))
{
    $username = $_SESSION['username'];
}
else
if(isset($_COOKIE['username']))
{
    $username = $_COOKIE['username'];
}

但是如果我尝试回显$ username,我会继续得到“未定义的变量”。 为什么?

我注意到如果我放了一个session_start();在顶部。我得到了适当的会话用户名,但当然不是cookie。 我该如何解决?

奇怪的部分(对我而言)是我在另一个页面中得到完全相同的代码(那部分),并且用户名未定义。

PS:如果不清楚或需要更多信息,请告诉我。

修改

我试过了:

    function accountValidation()
{
    if(isset($_SESSION['username']))
    {
        $username = $_SESSION['username'];
    }

    else if(isset($_COOKIE['username']))
    {   
        $cookie = $_COOKIE['username'];
        $explode = explode(' - ', $cookie);
        $username = $explode['0'];
    }
         echo $username;
}

accountValidation();

它有效......所以如果我把它放入一个函数然后调用它,它有效吗?!有什么不同?为什么它需要成为一个功能才能工作?

1 个答案:

答案 0 :(得分:0)

如果您设置了某个Cookie,则可以在下次重新加载时使用它。在调用页眉时设置$ _COOKIE。您无法从设置cookie的同一页面检索cookie。我希望你有我的意思。如果不让我知道我会举一个更好的例子。

编辑:

示例

<?php
    session_start();  
    $_SESSION['test'] = 'test1success';  
    echo $_SESSION['test'];// would display test1success  
    if (!isset($_COOKIE['test2']))  
    {
        setcookie("test2", "test2success", time()+3600);
    }  
    echo $_COOKIE['test2'];  
    // wont display test2success when you load the page for first time
    // reload it & it would display test2success
?>

<强>解释
您需要了解的第一件事是,在加载页面时,cookie会存储在您的PC(浏览器)上。客户端(即浏览器)将cookie头发送到服务器&amp;页面执行。在页面执行期间由set_cookie设置的值在客户端pc上设置,并且服务器不知道刚设置的新值 - 除非您重新加载页面&amp; cookie标头被发回。