Php 检查用户会话和cookie
我试图检查用户的会话是否可用,cookie是否可用。因此,如果用户在那里没有会话,请检查cookie是否在那里。如果它们是可用的cookie,请重置会话 当我第一次登录时,它就像我正在设置会话和cookie一样工作,但是当我关闭浏览器并重试时,我就被注销了。我知道发生了什么,出于某种原因,它没有在loginwithcookie中设置会话。我做错了什么 下面是login类的一部分Php 检查用户会话和cookie,php,session,cookies,pdo,Php,Session,Cookies,Pdo,我试图检查用户的会话是否可用,cookie是否可用。因此,如果用户在那里没有会话,请检查cookie是否在那里。如果它们是可用的cookie,请重置会话 当我第一次登录时,它就像我正在设置会话和cookie一样工作,但是当我关闭浏览器并重试时,我就被注销了。我知道发生了什么,出于某种原因,它没有在loginwithcookie中设置会话。我做错了什么 下面是login类的一部分 public function __construct(DB $pdo) { $this->pdo =
public function __construct(DB $pdo)
{
$this->pdo = $pdo->pdo;
if(isset($_GET['logout'])){
$_SESSION = array();
session_destroy();
setcookie('key', $cookieki, time()-3600, '/ff', 'www.dldesigns.me');
header('Location: index');
}
if(!empty($_SESSION['user_sess']) && $_SESSION['logged_in'] === true){
// check sessions
$this->loginwithsessions();
} else if(isset($_COOKIE['key'])) {
$this->loginwithcookie();
}
}
public function loginwithsessions()
{
$query = $this->pdo->prepare('SELECT * FROM `users` WHERE `user_key` = ?');
$query->bindValue(1, $_SESSION['user_sess']);
$query->execute();
$result = $query->fetchAll();
if(count($result) == 1){
// session matches database
$this->user_logged_in = true;
}
}
public function loginwithcookie()
{
$query = $this->pdo->prepare('SELECT * FROM `users` WHERE `cookie_key` = ?');
$query->bindValue(1, $_COOKIE['key']);
$query->execute();
$result = $query->fetchAll();
$fetch = $query->fetch();
if(count($result) == 1){
// cookie matches database
$this->user_logged_in = true;
$_SESSION['user_sess'] = $fetch['user_key'];
$_SESSION['logged_in'] = true;
}
}
public function checklogin()
{
if(!empty($_SESSION['user_sess']) && ($_SESSION['logged_in'] === true) && (!empty($_COOKIE['key'])) && $this->user_logged_in === true){
return true;
} else {
return false;
}
}
public function loginwithdata($email, $password)
{
$query = $this->pdo->prepare('SELECT * FROM `users` WHERE `email` = ?');
$query->bindValue(1, $email);
try{
$query->execute();
$data = $query->fetch();
$salt = $data['salt'];
$userkey = $data['user_key'];
$hashed_pass = sha1(md5($salt.$password));
if($this->verify($hashed_pass, $email) === true){
$_SESSION['user_sess'] = $userkey;
$_SESSION['logged_in'] = true;
$this->user_logged_in = true;
$cookieki = sha1(uniqid(mt_rand(), true));
setcookie('key', $cookieki, time()+3600, '/ff', 'www.dldesigns.me');
$update = $this->pdo->prepare('UPDATE `users` SET `cookie_key` = ? WHERE `user_key` = ?');
$update->bindValue(1, $cookieki);
$update->bindValue(2, $userkey);
$update->execute();
return true;
} else {
return false;
}
} catch(PDOException $e) {
die($e->getMessage());
}
}
下面是我如何检查的
if($login->checklogin() === true){
echo 'user session is' . $_SESSION['user_sess'];
echo '<br />';
echo 'cookie is' . $_COOKIE['key'];
} else {
echo "not logged in";
}
if($login->checklogin()==true){
回显“用户会话为”。$\u会话[“用户会话];
回声“
”;
echo'cookie is.$_cookie['key'];
}否则{
回显“未登录”;
}
Use正在使用$cookieki with hin函数,但函数未定义。另外,不要使用md5 function-use(使用更强大算法的crypt包装)。是的,我稍后会添加密码\u散列,但$cookieki不是问题所在,因为它正在设置中。我自己解决了这个问题,我没有从数据库获取用户密钥,因此会话没有值