我有以下结构:
Index.php
Account.php
Login.php
CheckLogin.php
当有人通过login.php登录时,它会检查用户名和密码并设置以下会话变量
$_SESSION['username'] = $username;
$_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
当他们访问Account.php时 包括检查HTTP_USER_AGENT的文件CheckLogin.php以及是否设置了用户名变量。
现在我在这里遇到问题。如果用户返回index.php(主页)并登录,我想显示帐户链接。 但是,如果用户没有登录,即只是访问过该网站,我想显示注册链接。 我以为我可以做以下事情:
<?php session_start()
if (!isset($_SESSION['username'])) {
// If username is not set destroy the session
session_destroy();
echo ("<a href=\"signup.php\">Sign up</a>");
}
else {
// If username is set
echo ("<a href=\"account.php\">Sign up</a>");
}
?>
我知道这不是完全安全的,但如果有人设法劫持会话并转到account.php它会进行检查,如果它们不合法,则应该销毁会话并将其注销。 这是最佳实践还是有更好的方法来实现这个理想的结果。我不禁想到每个人只是访问该网站并创建和销毁会话是一个坏主意。这是正确的做法还是我需要考虑的其他事项?
答案 0 :(得分:0)
这足以检查。无需在每次尝试时销毁会话。
<?php session_start()
if (isset($_SESSION['username'])) {
echo ("<a href=\"account.php\">Sign up</a>");
}
else {
// If username is not set
echo ("<a href=\"signup.php\">Sign up</a>");
}
?>
如果有人能够劫持会话,他也可以访问您的account.php
。如上所述,阅读有关auth系统的好教程或使用插件。在没有适当知识的情况下构建身份验证有点危险。
答案 1 :(得分:0)
如果您的检查仅基于会话,请确保您的网站不受保护。我有几点建议: 1-使用CSRF在您拥有的每个帖子上获得更高的安全性。 2-会话应始终加密,您应该使用salt密钥。 这样你就可以获得更多。仅仅用于信息会议并不总是保护您网站的最佳方式。