0

我试图在我的网站上重建登录,我继承了该网站,但登录当前是使用 ajax 构建的,并且需要永远登录。

我写了以下内容,允许用户登录......

<form name="form1" method="post" action="checklogin.php">
    <input name="myusername" type="text" id="myusername">
    <input name="mypassword" type="text" id="mypassword">
    <input type="submit" name="Submit" value="Login">
</form>

如果登录成功,用户将被重定向...

header("location:earn-credits.php");

我的问题是,当用户被发送到“赚取积分”页面时,会检查用户是否登录,如果他们没有将用户发送回主页......

if(!$usersClass->checkLoggedIn()) { 
  header("Location: /index.php");
}

现在我知道我的用户正在使用上述表单登录,因为他们正在被重定向并且我没有收到任何错误消息。

我是 PHP 和 AJAX 的新手,所以我要问的是为什么?我需要设置cookie吗?

下面是我检查用户是否登录的课程...

/**
 * check if user is logged in
 */ 
public function checkLoggedIn()
{
    if(isset($_SESSION['loggedIn']))
    {
        if(isset($_SESSION['loggedIn']['id']) && 
            isset($_SESSION['loggedIn']['username']) && 
            isset($_SESSION['loggedIn']['password']) && 
            isset($_SESSION['loggedIn']['credits']) && 
            isset($_SESSION['loggedIn']['active'])) {                   
                return true;
        }
    }

    return false;
}
4

3 回答 3

1

header("location:earn-credits.php");

您可能应该使用 $usersClass 来设置用户会话数据。

于 2012-10-17T08:03:42.980 回答
0

第一次session_start()调用在用户端创建一个PHPSESSID cookie,它帮助服务器维护哪个会话变量属于谁。会话旨在为您处理这些事情。

您无需为您的登录系统显式设置另一个 cookie。但是,一定要研究会话窃取和防止它的方法

于 2012-10-17T08:04:32.613 回答
0

几点建议:

首先,checklogin.php 上的脚本是否正在启动会话?(session_start() 或者可能是 php.ini 中的自动会话启动)?

其次,是 checklogin.php SETTING $_SESSION['loggedIn']['id'], $_SESSION['loggedIn']['username'] 等吗?

第三:您重定向到的页面(earn-credits.php)是否也在开始会话?您需要在每个页面上使用 session_start() ,否则会话将丢失。

第四:我在您的代码中没有看到任何 AJAX。

最后,只是风格问题:第一个 if 语句没有意义。我的意思是:if(isset($_SESSION['loggedIn']))。你已经在检查了。

public function checkLoggedIn()
{
    if(isset($_SESSION['loggedIn']))
    {
        if(isset($_SESSION['loggedIn']['id']) && 
            isset($_SESSION['loggedIn']['username']) && 
            isset($_SESSION['loggedIn']['password']) && 
            isset($_SESSION['loggedIn']['credits']) && 
            isset($_SESSION['loggedIn']['active'])) {                   
                return true;
        }
    }

    return false;
}

也可以是:

public function checkLoggedIn() {
 return ((isset($_SESSION['loggedIn']['id']) && 
            isset($_SESSION['loggedIn']['username']) && 
            isset($_SESSION['loggedIn']['password']) && 
            isset($_SESSION['loggedIn']['credits']) && 
            isset($_SESSION['loggedIn']['active'])));
}
于 2012-10-17T08:08:38.970 回答