2012-12-20 40 views
0

我有以下结构:PHP会话管理,这可以吗?

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

读取高级框架的代码并检查他们如何管理认证将很好地为您服务。 – kapa

+1

有很多很好的想法,通过PHP的登录系统,为什么不利用已经完成的? – jtheman

+0

只是一个提示:回声不是一个函数。使用回声“a”,而不是回声(“a”)。虽然没有区别。 –

回答

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。如上所述,阅读有关授权系统的优秀教程或使用插件。没有适当的知识建立认证是有点危险的。

+0

我担心的是,如果我有大量的访问者访问该网站,并且它正在创建一个会话,并且每次有人访问该页面时都离开该页面,那么这样做不会那么好。我不应该担心吗? – user1754727

+0

很多流量都没有安全问题。会话处理程序的构建方式可能是。 – aebersold

+0

你知道任何有关认证的好教程吗?我可以看一看吗? – user1754727

0

如果您的检查仅基于会话,请确保您的网站不会受到保护。我有几点建议: 1-在您拥有的每篇文章中使用CSRF来提高安全性。 2 - 会话应始终加密,你应该使用他们的盐密钥。 这样你可以获得更多的保障。而仅仅用于信息会议并不总是保护您的网站的最佳方式。

+0

感谢您的输入。你会建议认证的方式是什么? – user1754727