Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP登录和会话_Php_Mysql_Ajax - Fatal编程技术网

PHP登录和会话

PHP登录和会话,php,mysql,ajax,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="

我正试图在我的网站上重建一个登录名,我继承了这个网站,但是这个登录名目前是用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>
但我的问题是,当用户被发送到“赚取积分”页面时,会有一个检查以查看用户是否登录,如果他们没有登录,则会将用户发送回主页

if(!$usersClass->checkLoggedIn()) { 
  header("Location: /index.php");
}
现在我知道我的用户正在使用上面的表单登录,因为他们正在被重定向,并且我没有收到任何错误消息

我不熟悉PHP和AJAX,所以我想问的是为什么会这样?我需要放一块饼干吗

下面是我的类,检查用户是否登录

/**
 * 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;
}
以前

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

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

第一个
会话\u start()
调用在用户端创建一个phpsIdcookie,这有助于服务器维护哪个会话变量属于谁。课程旨在为您处理这些事情

您不需要为登录系统显式设置另一个cookie。但是,一定要注意以下几点:

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

其次,checklogin.php是否设置了$\u会话['loggedIn']['id']、$\u会话['loggedIn']['username']等

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

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

最后,只是s风格的问题:第一个if语句毫无意义。我指的是带有:if(isset($\u 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'])));
}

我没看到有问题吗?你说“现在我知道我的用户正在用上面的表单登录,因为他们被重定向了,我没有收到任何错误消息。”那么问题出在哪里?问题出在哪里?您声明用户正在登录一条无错误消息……因此,如果登录成功,用户将被重定向到earn-credits.php。那你为什么要检查用户是否登录到earn-credits.php?如果(!$usersClass->checkLoggedIn()){header(“Location:/index.php”);}告诉我有一个usersClass,它被用作用户数据的管理类。很抱歉,错过了那个。。。
public function checkLoggedIn() {
 return ((isset($_SESSION['loggedIn']['id']) && 
            isset($_SESSION['loggedIn']['username']) && 
            isset($_SESSION['loggedIn']['password']) && 
            isset($_SESSION['loggedIn']['credits']) && 
            isset($_SESSION['loggedIn']['active'])));
}