PHP/Ajax:成功登录后如何启动会话(其余代码正常工作)

PHP/Ajax:成功登录后如何启动会话(其余代码正常工作),php,ajax,session,session-variables,session-cookies,Php,Ajax,Session,Session Variables,Session Cookies,我是PHP新手,希望有人能在以下方面帮助我 我正在设置一个登录页面,在该页面中,我使用按钮上的onclick事件来验证用户输入的电子邮件和密码(“pass”)(检查电子邮件是否存在以及密码是否匹配) 到目前为止,一切都按预期进行,但我无法理解以下几点: 我在头文件中启动一个会话,如下所示。现在,当我验证用户的电子邮件和密码(“密码正确””)时,我想将两个变量传递到此会话,以便在其他页面上可以看到用户已登录。因此,我希望将变量“login”作为“loggedIn”传递,并将用户的电子邮件地址作为“

我是PHP新手,希望有人能在以下方面帮助我

我正在设置一个登录页面,在该页面中,我使用按钮上的onclick事件来验证用户输入的电子邮件和密码(“pass”)(检查电子邮件是否存在以及密码是否匹配)

到目前为止,一切都按预期进行,但我无法理解以下几点: 我在头文件中启动一个会话,如下所示。现在,当我验证用户的电子邮件和密码(“
密码正确”
”)时,我想将两个变量传递到此会话,以便在其他页面上可以看到用户已登录。因此,我希望将变量“
login
”作为“
loggedIn
”传递,并将用户的电子邮件地址作为“
username
”传递

有人能告诉我,我是如何在这里意识到这一点的吗? 当我已经验证了用户后,我可以在ajax.php页面上执行此操作吗

如何在我的标题中启动会话:

session_start();
case "loginUser":
    // login user
    $email = $_POST["email"];
    $pass = $_POST["pass"]; 

    $stmt = $conn->prepare("SELECT pw FROM Users WHERE email = ? LIMIT 1");
    $stmt->bind_param('s', $email);
    $stmt->execute();
    $result = $stmt->get_result();          
    if(!$result || !$result->num_rows){
        echo "Email has not been registered yet";
    }else{      
        $passHashed = $result->fetch_assoc();
        if(password_verify($pass, $passHashed["pw"])){
            echo "Password correct";
        }else{
            echo "Password incorrect";
        }
    }
    break;
验证用户的Ajax调用(在jQuery中):

$.ajax({        
    type: "post",   
    url: "ajax.php",
    cache: "false",
    data: {
        node: 'loginUser',
        email: email,
        pass: pass
    },
    success: function(data){
        if(data == 'Password correct'){
            // redirect to index page
            window.location.href = baseURL + '/index.php?lang=' + selectedLang
        }else{
            alert(data);
        }
    },
    error: function(){
    }
});
ajax.php页面上用来自ajax的输入验证用户的部分:

session_start();
case "loginUser":
    // login user
    $email = $_POST["email"];
    $pass = $_POST["pass"]; 

    $stmt = $conn->prepare("SELECT pw FROM Users WHERE email = ? LIMIT 1");
    $stmt->bind_param('s', $email);
    $stmt->execute();
    $result = $stmt->get_result();          
    if(!$result || !$result->num_rows){
        echo "Email has not been registered yet";
    }else{      
        $passHashed = $result->fetch_assoc();
        if(password_verify($pass, $passHashed["pw"])){
            echo "Password correct";
        }else{
            echo "Password incorrect";
        }
    }
    break;

在此,非常感谢您的帮助

您是否尝试在语句之后设置会话变量

$passHashed = $result->fetch_assoc();
if(password_verify($pass, $passHashed["pw"])){
    echo "Password correct";
    //set session loggedIn = variable login
    $_SESSION["loggedIn"]= true;
    //set user to
    $_SESSION["username"]= $email;
} else {...}

您是否尝试在语句之后设置会话变量

$passHashed = $result->fetch_assoc();
if(password_verify($pass, $passHashed["pw"])){
    echo "Password correct";
    //set session loggedIn = variable login
    $_SESSION["loggedIn"]= true;
    //set user to
    $_SESSION["username"]= $email;
} else {...}

ajax.php上执行以下操作:-

<?php
session_start(); // this must be first line
case "loginUser":
    // login user
    $email = $_POST["email"];
    $pass = $_POST["pass"]; 

    $stmt = $conn->prepare("SELECT pw FROM Users WHERE email = ? LIMIT 1");
    $stmt->bind_param('s', $email);
    $stmt->execute();
    $result = $stmt->get_result();          
    if(!$result || !$result->num_rows){
        echo "Email has not been registered yet";
    }else{      
        $passHashed = $result->fetch_assoc();
        if(password_verify($pass, $passHashed["pw"])){
            $_SESSION['User']['login'] = 'loggedIn'; // assignment 
            $_SESSION['User']['username'] = $email;  // assignment
            echo "Password correct";
        }else{
            echo "Password incorrect";
        }
    }
    break;


ajax.php上的
执行以下操作:-

<?php
session_start(); // this must be first line
case "loginUser":
    // login user
    $email = $_POST["email"];
    $pass = $_POST["pass"]; 

    $stmt = $conn->prepare("SELECT pw FROM Users WHERE email = ? LIMIT 1");
    $stmt->bind_param('s', $email);
    $stmt->execute();
    $result = $stmt->get_result();          
    if(!$result || !$result->num_rows){
        echo "Email has not been registered yet";
    }else{      
        $passHashed = $result->fetch_assoc();
        if(password_verify($pass, $passHashed["pw"])){
            $_SESSION['User']['login'] = 'loggedIn'; // assignment 
            $_SESSION['User']['username'] = $email;  // assignment
            echo "Password correct";
        }else{
            echo "Password incorrect";
        }
    }
    break;


非常感谢,没有。我以前从未使用过会话,所以我有点被困在这里。那么我可以直接在ajax.php页面上完成吗?@TaneMahuta没问题!你可以在这里查看详细的文档:这里有很多例子。你提供的链接和信息非常好,肯定有很大帮助。阿南特的回答更详细一点,似乎很适合我的需要,所以我会接受他的回答,但投你的赞成票,希望没问题。再次感谢你的帮助!非常感谢,不,我没有。我以前从未使用过会话,所以我有点被困在这里。那么我可以直接在ajax.php页面上完成吗?@TaneMahuta没问题!你可以在这里查看详细的文档:这里有很多例子。你提供的链接和信息非常好,肯定有很大帮助。阿南特的回答更详细一点,似乎很适合我的需要,所以我会接受他的回答,但投你的赞成票,希望没问题。再次感谢你的帮助!这太棒了-非常感谢!我喜欢用户的方法。很抱歉,我只看到一件事:关于您使用的pre标签,是否之前不需要打开标签?抱歉,如果这是一个初学者问题。这太棒了-非常感谢!我喜欢用户的方法。很抱歉,我只看到一件事:关于您使用的pre标签,是否之前不需要打开标签?抱歉,如果这是一个初学者的问题。