我对PHP很新。
我为我的网站制作了一个登录系统,我想知道我是否以正确的方式进行此操作。在处理登录请求的login.php
上,我创建了在我的站点上使用的会话变量。我想知道这是否是存储用户数据的最有效/最安全的方式。
这种方法对我来说似乎很有效。但是,我要说我需要来自另一个表的数据,不包括在我的用户表中。我如何获取该信息并将其存储到会话中?由于浏览器拥有所有这些信息,这是否会使我的用户容易受到攻击?或者我对会话的理解完全错误。
<?php
/* User login process, checks if user exists and password is correct */
// Escape email to protect against SQL injections
$email = $mysqli->escape_string($_POST['email']);
$result = $mysqli->query("SELECT * FROM users WHERE email='$email'");
if ($result->num_rows == 0) { // User doesn't exist
$_SESSION['message'] = "User with that email doesn't exist!";
header("location: error.php");
} else { // User exists
$user = $result->fetch_assoc();
if ( password_verify($_POST['password'], $user['password']) ) {
$_SESSION['email'] = $user['email'];
$_SESSION['user_name'] = $user['user_name'];
$_SESSION['active'] = $user['active'];
$_SESSION['paid'] = $user['paid'];
$_SESSION['bitaddress'] = $user['bitaddress'];
$_SESSION['id'] = $user['id'];
$_SESSION['firstName'] = $user['firstName'];
$_SESSION['lastName'] = $user['lastName'];
// This is how we'll know the user is logged in
$_SESSION['logged_in'] = true;
header("location: checksum.php");
} else {
$_SESSION['message'] = "You have entered wrong password, try again!";
header("location: error.php");
}
}
答案 0 :(得分:2)
你应该为会话创建一个方法 像:
function session_start(){
session_start()
}
function session_create($key,$value){
return $_SESSION[$key] = $value;
}
function session_destroy(){
session_destroy();
}
答案 1 :(得分:0)
只要使用不同的密钥,就可以存储来自多个表(或任何其他值)的数据。
会话存储在服务器端,因此您的浏览器没有此信息。但仍有漏洞,请参阅会话劫持https://www.owasp.org/index.php/Session_hijacking_attack。
通常,您可以很好地使用会话。