2

我为游戏服务器管理创建了一个小型 php 站点,但它并没有强制未登录的用户登录。如果会话未激活,我添加了重定向,并在注销时销毁了会话。该网站在这里http://zelware.co.uk/gameman

它会强制您第一次登录,但如果您将 login.php 从 URL 中删除,它会允许您再次进入主区域。任何帮助将不胜感激,谢谢!

4

3 回答 3

0

要对用户进行身份验证,您需要一个简单的机制:

  • 所有页面都应通过检查某些会话值来保护,如果该值不存在,则重定向到登录页面。您可以在单独的函数/文件中编写此检查的代码,并在您网站的每个页面中调用/包含它。

    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();
    
于 2013-03-31T13:04:53.757 回答
0

您需要创建一种机制来验证用户是否已登录。登录时,系统会设置一个会话 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;

      }
于 2013-03-31T15:33:35.250 回答
0

你需要一个 if 语句

$_SESSION['loggedin']==TRUE; 

检查是否有人登录。还可以考虑设置 session_id() 并以此进行重定向。

于 2013-03-31T12:38:34.530 回答