Php 在何处存储具有cookie且无会话的用户的用户ID(记住我)
我读了很多关于这件事的问题,讨论和回答都不一样 我需要有用户ID,以便从DB检索他的数据,并使用此数据创建会话,以便创建连续登录 散列会话:Php 在何处存储具有cookie且无会话的用户的用户ID(记住我),php,session,Php,Session,我读了很多关于这件事的问题,讨论和回答都不一样 我需要有用户ID,以便从DB检索他的数据,并使用此数据创建会话,以便创建连续登录 散列会话: function createNewUserSession($uid, $email, $salt){ $session_key = $email.$salt; $options = [ 'cost' => 11 ]; $session_key = password_hash($session_key,
function createNewUserSession($uid, $email, $salt){
$session_key = $email.$salt;
$options = [
'cost' => 11
];
$session_key = password_hash($session_key, PASSWORD_BCRYPT, $options);
$connect = mysqliConnect();
$query = "UPDATE `users` SET";
$query .= " session_key = '$session_key'";
$query .= " WHERE id = '$uid'";
mysqli_query($connect, $query);
return $session_key;
}
function generateRandomString($length) {
return substr(str_shuffle(str_repeat($x='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+|"}?><~', ceil($length/strlen($x)) )),1,$length);
}
$user_session_salt = generateRandomString(32);
if (isset($_COOKIE['sk'])) {
if (password_verify($email.$_COOKIE['sk'], $session_key)) {
// Creating Sessions
$_SESSION['uid'] = $uid;
$_SESSION['fName'] = $fName;
$_SESSION['lName'] = $lName;
} else {
// Creating New Sessions
createNewUserSession($uid, $email, $user_session_salt);
$_SESSION['uid'] = $uid;
$_SESSION['fName'] = $fName;
$_SESSION['lName'] = $lName;
// Creating Cookies
setcookie("sk", $user_session_salt, time() + (90 * 24 * 60 * 60), '/', '.mywebsite.io');
}
}
我知道这并不完美,但我仍在学习,需要在这方面提供足够的信息。警告:使用
mysqli
时,您应该使用and将用户数据添加到查询中。不要使用字符串插值或串联来完成此操作,因为您已经创建了严重的错误。切勿将$\u POST
、$\u GET
或任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。注意:mysqli
的面向对象界面明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql\u查询
接口混淆。在你对程序性风格投入太多之前,值得换一种。示例:$db=new mysqli(…)
和$db->prepare(“…”)
过程接口是PHP 4时代的产物,当时引入了mysqli
API,不应在新代码中使用。警告:编写自己的访问控制层并不容易,而且有很多机会使它严重出错。请不要写你自己的认证系统,当任何一个现代的都有一个坚固的内置。完美,我将要克服程序风格反正你刚才推我重新考虑它。不过,我在这个小项目上的时间有点短,我相信重构代码需要相当长的时间。感谢您的建议。已接受,再次感谢:)
function restoreSession($uid) {
$connect = mysqliConnect();
$query = "SELECT * FROM `users` WHERE id = '$uid'";
$result = mysqli_query($connect, $query);
if (mysqli_num_rows($result) == 1) {
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
$uid = $row['id'];
$email = $row['email'];
$fName = $row['first_name'];
$lName = $row['last_name'];
$session_key = $row['session_key'];
if (isset($_COOKIE['sk']) && !isset($_SESSION['uid'])) {
$user_salt = $_COOKIE['sk'];
if (password_verify($email.$user_salt, $session_key)) {
// Creating Sessions
$_SESSION['uid'] = $uid;
$_SESSION['fName'] = $fName;
$_SESSION['lName'] = $lName;
}
}
}
}