PHP登录和会话

时间:2012-10-17 08:00:29

标签: php mysql ajax

我试图在我的网站上重建登录,我继承了网站,但登录目前使用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");

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

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

3 个答案:

答案 0 :(得分:1)

之前

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

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

答案 1 :(得分:0)

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

您无需为登录系统明确设置其他Cookie。但是,请查看session-stealing and ways to prevent it

答案 2 :(得分:0)

一些指示:

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

第二,是checklogin.php设置$ _SESSION ['loggedIn'] ['id'],$ _SESSION ['loggedIn'] ['用户名']等?

第三:您重定向到的页面(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'])));
}