0

我有一个允许持久登录和常规会话的登录表单。长话短说,当用户在他们的帐户中时,他们可以更改密码、电子邮件和其他东西。但为此,我需要先从他们的会话或 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();

它起作用了......所以如果我把它放到一个函数中然后调用它,它会起作用吗?!有什么区别?为什么它需要进入一个函数才能工作???

4

1 回答 1

1

如果您设置了某些 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 标头发送到服务器并执行页面。在页面执行期间由 set_cookie 设置的值是在客户端 PC 上设置的,并且服务器不知道刚刚设置的新值 - 除非您重新加载页面并发送回 cookie 标头。

于 2012-08-26T16:36:41.677 回答