猿问

用于登录的多个数据库请求

我有三个与我的登录场景的这一部分相关的文件:

/project/index.html

/project/api/user/login.php

/project/api/objects/user.php


index.html 中有一个简单的登录表单,调用 ./api/user/login.php。

在这种形式中,我有一个复选框,用户可以选择是否保持登录状态。


如果用户选择了此选项,每次登录时,我想检查凭据是否正确(登录功能 - > user.php 中的 stmt1)以及更新 lastlogin(日期时间)、标识符和安全令牌(如果复选框已设置(登录功能 - > user.php 中的 stmt2)。


user.php 包含在 login.php 中,它从 index.html 表单中获取值并将它们发送到 user.php 中的 login() 函数。

根据函数的返回值,login.php 决定登录是否成功。


登录本身 (stmt1) 有效,但 lastlogin、标识符和安全令牌 (stmt2) 的更新不起作用。


登录.php


session_start();


// include database and object files

include_once '../config/database.php';

include_once '../objects/user.php';


// get database connection

$database = new Database();

$db = $database->getConnection();


// prepare user object

$user = new User($db);

// set ID property of user to be edited

$user->username = isset($_GET['username']) ? $_GET['username'] : die();

$user->password = base64_encode(isset($_GET['password']) ? $_GET['password'] : die());

$user->remember = isset($_GET['remember']) ? $_GET['remember'] : die();


$stmt1 = $user->login();

if($stmt1->rowCount() > 0){

    // get retrieved row

    $row1 = $stmt1->fetch(PDO::FETCH_ASSOC);

    $_SESSION['userid'] = $row1['uid'];


    // create array

    $user_arr=array(

        "status" => true,

        "message" => "Login erfolgreich!",

        "uid" => $row1['uid'],

        "username" => $row1['username']

    );


    $stmt2 = $user->login();

    $row2 = $stmt2->fetch(PDO::FETCH_ASSOC);

    print_r($row2);


    // create array

    $user_arr=array(

        "lastlogin" => $row2['lastlogin']

    );

}

else{

    $user_arr=array(

        "status" => false,

        "message" => "Benutzername und/oder Passwort nicht korrekt!",

    );

}

// make it json format

print_r(json_encode($user_arr));

?>


慕尼黑5688855
浏览 71回答 1
1回答

子衿沉夜

在user.php之后return $stmt1; 返回代码并且未设置cookies我会这样做...检查登录...如果为真,请使用 id 和令牌保存 cookie 然后定期检查令牌和 id 是否对应...如果是...只需更新上次登录时间。注意:您准备好的声明很容易受到攻击!不要在参数后面加上“。” 改用占位符,并且不对密码进行编码,最好对其进行散列...然后比较散列
随时随地看视频慕课网APP
我要回答