我为游戏服务器管理创建了一个小型 php 站点,但它并没有强制未登录的用户登录。如果会话未激活,我添加了重定向,并在注销时销毁了会话。该网站在这里http://zelware.co.uk/gameman
它会强制您第一次登录,但如果您将 login.php 从 URL 中删除,它会允许您再次进入主区域。任何帮助将不胜感激,谢谢!
要对用户进行身份验证,您需要一个简单的机制:
所有页面都应通过检查某些会话值来保护,如果该值不存在,则重定向到登录页面。您可以在单独的函数/文件中编写此检查的代码,并在您网站的每个页面中调用/包含它。
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();
您需要创建一种机制来验证用户是否已登录。登录时,系统会设置一个会话 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;
}
你需要一个 if 语句
$_SESSION['loggedin']==TRUE;
检查是否有人登录。还可以考虑设置 session_id() 并以此进行重定向。