我想保持密码就像在cookie中一样是不安全的。问题是我正在使用password_hash()
,并且要验证密码我必须拥有没有加密的密码。在登录表单中,它很容易 -
<?php
password_verify($_POST['password'], $dbpassword);
?>
问题是使用cookie进行验证。在我的配置文件中,我使用与日志记录表单相同的验证,但数据来自cookie,并返回false
或true
。但是cookie中的密码已经加密,因此password_verify()
将无效。那我该怎么办?
答案 0 :(得分:2)
在密码中存储密码严重禁止!不要这样做!
我认为您在询问的是“如何检查用户是否已登录?”
我建议使用SESSIONS,而不是COOKIES。
当用户访问您的网站时,会自动创建一个带有会话ID的COOKIE,并在每个访问过的页面上传输。
会话存储在服务器上。
当您进行用户身份验证(检查数据库上存在的用户名和密码并匹配提供的详细信息)时,您可以设置一些会话变量(例如$_SESSION['loggedin'] = true;
),然后当您要检查用户是否是登录后,您将查找此会话变量(例如
//Check if user is logged in.
if(array_key_exists('loggedin',$_SESSION) && $_SESSION['loggedin'] === true) {
// do something here
}
这只是一个基本实现,我强烈建议您阅读一些有关PHP安全性的在线资源。
答案 1 :(得分:1)
无法将密码安全地存储在Cookie中。另一种选择(尽管仍然不推荐)是将它存储在$ _SESSION中 - 它仍然有点不安全,因为会话可能被劫持,或者恶意代码可能导致它通过网络发送出去。你不应该比较实际的密码,你需要使用哈希值(md5或更安全的东西)和盐。
基本上:
$db_password=get_password_hash_from_db(); /*you should store the md5(salt+password) in the db, not password*/
$salt='some_secret_constant';
if ($_POST['password']) $_SESSION['password']=md5($salt+$_POST['password']);
if ($_SESSION['password']!=$db_password) die('Wrong Password');