PHP - 检查用户是否已登录

时间:2014-04-01 18:33:40

标签: php login

我是PHP的新手,所以我希望有一些可以提供帮助。 我有一个工作正常的登录页面。 我的问题是,如果你知道网址,你仍然可以访问子页面。

这就是我在登录页面上所说的内容

<body>
<?php
if(@!empty($_SESSION['acesses'])) {
echo '<script language="JavaScript">{ location.href="subpage.php"; self.focus(); }</script>';
}
?>
<div id="loginWrapper">
<div id="login">
    <form name="loginform" action="<?php $_SERVER['REQUEST_URI']; ?>" method="post" autocomplete="on">
        <fieldset id="input">
            <h1>Log Ind</h1>
            <?php
                if(isset($_POST['submit'])) {
                    echo '<div class="errorBox">';
                    $username = mysqli_escape_string($conn,$_POST['username']);
                    $password = mysqli_escape_string($conn,$_POST['password']);

                    if(!empty($username) && !empty($password)) {
                        $query = mysqli_query($conn,"SELECT * FROM member WHERE username='$username' LIMIT 1");
                        $result = mysqli_fetch_array($query);

                        if($result['username'] == $username && $result['password'] == $password) {
                            //Sesstion Information
                            $_SESSION['acesses'] = $result['id'];
                            echo '<script language="JavaScript">{ location.href="subpage.php"; self.focus(); }</script>';
                        }else {
                            echo 'Brugernavnet eller Adganskoden stemmer ikke overens.';
                        }
                    }
                    echo '</div>';
                }
            ?>

            <label for="username"> Dit Brugernavn</label>
            <input name="username" id="user" type="text" placeholder="Brugernavn"> 

            <label for="password"> Dit password </label>  
            <input name="password" id="pass" type="password" placeholder="Password">
            <input name="submit" type="submit" value="Log ind" />
        </fieldset>   
     </form>
..........

这就是我在子页面顶部所说的内容

<?php
session_start();

if(!empty($_SESSION['acesses'])) {   
echo '<script language="JavaScript">{ location.href="login.php"; self.focus(); }</script>';
}
?>
<!doctype html>
<html lang="en">
<head>

4 个答案:

答案 0 :(得分:3)

如果用户未登录,您可以重定向用户,反之亦然。

if (!empty($_SESSION['acesses'])){ 
            header("Location: yourpage.php"); // or whatever page you like
            exit();
}
else{  
// your code for when user is logged in 
}

不要使用JavaScript重定向,尤其是在处理会话时。用户只需在浏览器中关闭JavaScript,重定向就不再有效了。

答案 1 :(得分:1)

首先,如果用户登录,您的子页面会重定向。其次,请使用HTTP来代替javascript重定向:

<?php
session_start();

if(!isset($_SESSION['acesses']) || empty($_SESSION['acesses'])) {   
    Header("Location: index.php");
}
?>

答案 2 :(得分:1)

您可以在要保护的页面中使用以下逻辑:

if(isset($_SESSION['acesses']) && !empty($_SESSION['acesses'])){
// give access
}

else{
// don't give access
}

并为您的所有网页执行相同操作。

旁注:您为登录页面发布的代码不包含session_start(); - 如果它不在您的工作代码中,请将其包含在内。它必须位于使用sessions的所有页面内。

<body>
<?php
session_start();
    if(@!empty($_SESSION['acesses'])) {
    echo '<script language="JavaScript">{ location.href="subpage.php"; self.focus(); }</script>';
    }
?>

您还应考虑在代码中嵌入<noscript>Please enable Javascript</noscript>,并在用户未启用时重定向。


重要的旁注 :我注意到您以纯文本格式存储密码。 非常气馁

如果您的PHP版本为5.5,则可以使用password_hash()功能,或crypt()bcrypt()

以下是您可以查看的一些资源:


关于使用Javascript:

如果您绝对想在代码中使用JS,可以使用以下逻辑:

<?php
    echo "<div id=\"hide\">This line is hidden in PHP and will appear once JS is enabled.</div>";
    // you can include your JS anywhere in here and will execute once the user enables JS.
?>

<body>
<div class="hide_class">This is hidden using a CSS class and will appear once JS is enabled.</div>

<noscript>
Please enable Javascript to view the content of this page, thank you.

    <style>
    #hide {
    display:none;
    }

    .hide_class {
    display:none;
    }
    </style>

</noscript>
</body>

答案 3 :(得分:0)

首先,您应该使用PHP-PDO来防止SQL注入攻击。

您的代码在子页面上也是错误的。您应该查看变量 acesses ,如下例所示。

if(!isset($_SESSION['acesses']) or empty($_SESSION['acesses'])) {   
echo '<script language="JavaScript">{ location.href="login.php"; self.focus(); }</script>';
}