PHP 你应该设置会话密码吗

PHP Should you session password

我正在构建一个要求用户输入电子邮件、密码和全名的网站。我使用电子邮件和密码作为登录要求。

目前,我正在使用会话变量将电子邮件和密码(不是 hashed/salted)从 login.php 传递到 index.php 和其他 php 页面。 (在数据库中散列和加盐)

每次用户进入另一个页面时,它都会再次检查用户的电子邮件和密码会话变量。

使用会话变量存储电子邮件和密码是否安全? 如果没有,我怎样才能让它更安全?

参见 -- Is it secure to store a password in a session? -- 关于这一点,但你也应该知道不必这样做是多么容易。

您可能会发现大多数人不这样做的原因,无论安全与否,是因为您在每个页面加载时验证登录,从而强制进行不必要的页面检查和数据库调用。如果我可以提供一个更简单的解决方案来使问题过时,请考虑以下代码 ::

一旦用户在登录页面成功登录,像这样添加一个会话变量::

$_SESSION['loggedin'] = 1;

然后在不同的页面上,你可以把这个无关的密码检查代码去掉,然后简单地做

if( $_SESSION['loggedin'] != 1 ) {
    die('You are not logged in'); // or redirect to login page
}

在此示例中,我们采用了一种非常简单的方法,但这应该可以帮助您开始了解避免这种在会话中存储密码的做法所需的逻辑。