PHP会话管理,这样可以吗?

时间:2012-12-20 22:48:02

标签: php session isset

我有以下结构:

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它会进行检查,如果它们不合法,则应该销毁会话并将其注销。 这是最佳实践还是有更好的方法来实现这个理想的结果。我不禁想到每个人只是访问该网站并创建和销毁会话是一个坏主意。这是正确的做法还是我需要考虑的其他事项?

2 个答案:

答案 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密钥。 这样你就可以获得更多。仅仅用于信息会议并不总是保护您网站的最佳方式。