PHP / Ajax:成功登录后如何启动 session(其余代码有效)

PHP / Ajax: How to initiate session after successful login (rest of code working)

我是 PHP 的新手,希望有人能帮助我解决以下问题。

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

到目前为止一切都按预期工作,但我无法弄清楚以下内容: 我在我的 header 文件中启动了一个 session,如下所示。现在,当我验证用户的电子邮件和密码 ("password correct") 我想将两个变量传递给此 session 以便在其他页面上我可以看到用户已经登录在。因此,我想将变量“login”作为“loggedIn”传递,将用户的电子邮件地址作为“username”传递。

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

session 如何在我的 header 中启动:

session_start();

用于验证用户的 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 的输入验证用户的部分:

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 {...}

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;

在任何其他 php 页面上:-

<?php
session_start();
echo "<pre/>";print_r($_SESSION['User']);
// rest code
?>