有一个 PHP 重定向到登录页面,而不是强制登录
Posted
技术标签:
【中文标题】有一个 PHP 重定向到登录页面,而不是强制登录【英文标题】:Have a PHP redirect to login page, not forcing login 【发布时间】:2013-03-21 16:45:22 【问题描述】:我创建了一个用于游戏服务器管理的小型 php 站点,但它不会强制未登录的用户登录。如果会话未激活,我添加了重定向,并在注销时销毁了会话。该网站在这里http://zelware.co.uk/gameman
它会强制您第一次登录,但如果您从 URL 中删除 login.php,它会允许您再次进入主区域。任何帮助将不胜感激,谢谢!
【问题讨论】:
没有您的一些代码或您尝试过的代码(特定于代码),我们几乎无法为您提供帮助。 如果你有会话+重定向代码,它可能有助于调试 然后检查每个页面上的会话,并显示一些您尝试过的与此相关的代码,因为您可能在某个地方搞砸了。 虽然我试过你的网址,我显然是自动登录的,但无法注销。肯定有问题。 【参考方案1】:你需要一个带有
的 if 语句$_SESSION['loggedin']==TRUE;
检查是否有人登录。 还可以考虑设置 session_id() 并使用此重定向。
【讨论】:
这太糟糕了,每个人都可以使用工具创建会话,因此仅登录 = true 是最不安全的登录身份验证方式...... 不!那是一种误解。我没有说以上。【参考方案2】:要对用户进行身份验证,您需要一个简单的机制:
所有页面都应该受到检查的保护,该检查会查找一些会话值,如果该值不存在,则重定向到登录页面。您可以在单独的函数/文件中编写此检查的代码,并在您网站的每个页面中调用/包含它。
is_user_logged_in()
return $_SESSION['logged_in']; // it is a boolean value, which should be set TRUE by the login function
//in every page of yours you should call this
if ( !is_user_logged_in() )
//redirect to you login page
header("Location: http://yoursitename.com/login_page.php");
登录页面应验证用户名/密码,如果有效,则在每个其他页面中创建您要检查的会话值。
if ( valid_user($username, $password) )
// this is the value you should check for in other pages
$_SESSION['logged_in'] = TRUE;
// you may also need to store other user-related info in the session
$_SESSION['user'] = array("id" => 1 , "username" => "test_user") // a data array from DB
注销页面应该破坏您在其他所有页面中检查的会话值。
unset($_SESSION['logged_in']);
session_destroy();
【讨论】:
【参考方案3】:您需要创建一种机制来验证用户是否已登录。 登录时,系统会设置一个会话 cookie - 一个随机的、唯一的散列。哈希值以 cookie 的形式存储在数据库中,以及用户名、密码、IP 和登录时间。
当用户访问页面时,您调用的函数看起来有点像这样:(不完全是,这不是很好,只是基本检查,您还应该检查 IP 是否匹配以及会话是否已过期)
function verify_login()
//
$hash = $_COOKIE['loginhash'];
if($hash != ''):
$hash = mysql_real_escape_string($hash);
$sql = "SELECT * FROM session WHERE hash = '$hash'";
else:
header('Location: login.php');
endif;
$res = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($res) !=0):
while($row = mysql_fetch_assoc($res))
echo 'The user is logged in.';
else:
header('Location: login.php');
endif;
【讨论】:
以上是关于有一个 PHP 重定向到登录页面,而不是强制登录的主要内容,如果未能解决你的问题,请参考以下文章
项目一众筹网02_2_管理员登录(转发改成重定向到主页面退出登录(转发和重定向的区别强制session失效invalidate)新建jsp模板
使 Web API 身份验证返回 401 而不是重定向到登录页面