PHP会话:预设登录详细信息仅在本地工作

时间:2015-06-28 20:10:31

标签: php html

我正在一个网站上工作,我决定为它制作自己的CMS。它并不需要惊人的安全性,但我确实有一个登录页面,如果正确填写登录信息,它将指向CMS页面。

只能使用1个帐户(admin)登录。并且其登录名和密码在登录页面PHP文件中设置。提交表单时,它会检查是否填写了正确的信息,如果是,则将用户名放在SESSION [user]变量中。

只要该会话存在,登录页面应始终自动导向您到CMS页面,但这似乎只在本地工作。当我把它放在网上,并填写正确的信息并在登录页面上提交表格时,它只是停留在同一页面而不是进入CMS页面。当我手动输入cms页面的URL时,我可以访问它而不会被定向到登录页面。在我的PHP中,我会检查$ _SESSION [' user'] == admin。

你们中的任何人都知道为什么这只能在本地工作,我需要改变什么才能使它在线工作?

以下是相关代码:

//登录PHP PAGE

<?php
session_start();
    //login info
    $xinlognaam = 'admin';
    $xwachtwoord = 'PASSWORD HERE';

    //als je al ingelogd bent, wordt je direct naar cms pagina gestuurd
    if(!empty($_SESSION['user'])){
        if($_SESSION['user'] == $xinlognaam){
            header("Location: ../php/cms.php");
        }
    }
?>

    <div id="inlogsectie">
        <form id="inlogform" method="POST" action="#">

            Accountnaam:<br><br>
            <input type="text" name="accountnaam" id="accountnaam" maxlength="100"/><br><br><br>

            Wachtwoord:<br><br>
            <input type="text" name="wachtwoord" id="wachtwoord" maxlength="100"/><br><br><br>

            <input type="submit" name="inlogknop" id="inlogknop" value="inloggen"/>
        </form>

        <div id="inlogmelding">
            <?php
                //als op de knop gedrukt wordt
                if(isset($_POST['inlogknop'])){
                    //als velden niet leeg zijn
                    if(!empty($_POST['accountnaam']) && !empty($_POST['wachtwoord'])) {
                        //als de gegevens correct zijn
                        if(($xinlognaam == $_POST['accountnaam']) && ($xwachtwoord == $_POST['wachtwoord'])){
                            $_SESSION['user'] = $xinlognaam;
                            header("Location: ../php/cms.php");
                        //als de gegevens incorrect zijn
                        }else{
                            echo"De ingevulde login informatie is incorrect.";
                        }
                    } else{ //als velden leeg zijn
                        echo"De ingevulde login informatie is incorrect.";
                    }
                }
            ?>
        </div>
    </div>

// CMS PAGE

 <?php
  session_start();

 if($_SESSION['user'] != 'admin'){
        header('Location: ../admin/index.php');
    }

 if(isset($_POST['uitlogknop'])){
        include_once('uitloggen.php');
    }
   ?>

//注销PHP文件

<?php
session_destroy();

header("Location: ../admin/index.php");

?>

3 个答案:

答案 0 :(得分:1)

用于重定向的header()功能仅在尚未发送内容的情况下才有效。发送内容后,无法修改HTTP标头,因为它已从服务器发送到客户端。

这意味着,如果您在任何HTML之后调用header()(即使它只是<html>标记或单个echo,或者甚至是在开放之前的空格{{} 1}})它可能不起作用。我说可能,因为有时服务器没有在生成第二个内容时发送所有内容,因此仍然可以编辑HTTP标头。

因此,解决方案是将<?php调用移至页面顶部。更多信息可以在PHP documentation

中找到

另外,请勿将密码发布到Stack Overflow。 : - )

答案 1 :(得分:1)

首先,在将内容发送到浏览器后,您无法设置header()。所以你的登录页面会有问题。我建议:

<?php
session_start();
//login info
$xinlognaam = 'admin';
$xwachtwoord = 'knipwerk';
$html = "";

//als je al ingelogd bent, wordt je direct naar cms pagina gestuurd
if(!empty($_SESSION['user'])){
    if($_SESSION['user'] == $xinlognaam){
       header("Location: ../php/cms.php");
    }
}

//als op de knop gedrukt wordt
if(isset($_POST['inlogknop'])){
    //als velden niet leeg zijn
    if(!empty($_POST['accountnaam']) && !empty($_POST['wachtwoord'])) {
        //als de gegevens correct zijn
        if(($xinlognaam == $_POST['accountnaam']) && ($xwachtwoord == $_POST['wachtwoord'])){
            $_SESSION['user'] = $xinlognaam;
            header("Location: ../php/cms.php");
            //als de gegevens incorrect zijn
        } else {
            $html .= "De ingevulde login informatie is incorrect.";
        }
    } else {
        //als velden leeg zijn
        $html .= "De ingevulde login informatie is incorrect.";
    }
}
?>
<html>
<body>
<div id="inlogsectie">
    <form id="inlogform" method="POST" action="#">
        <p><label>Accountnaam:</label>
        <input type="text" name="accountnaam" id="accountnaam" maxlength="100"/></p>
        <p><label>Wachtwoord:</label>
        <input type="text" name="wachtwoord" id="wachtwoord" maxlength="100"/></p>
        <p><input type="submit" name="inlogknop" id="inlogknop" value="inloggen" /></p>
    </form>
    <div id="inlogmelding">
    <?php echo $html; ?>
    </div>
</div>
</body>
</html>

答案 2 :(得分:0)

这可以解决您的问题:

> <?php session_start() ?>
> 
> <?php 
> 
> 
> if(isset($_SESSION['login_user'])) {  header('Location:
> ../php/cms.php'); } else {
> 
> ?>    <div id="inlogsectie">
>         <form id="inlogform" method="POST" action="">
> 
>             Accountnaam:<br><br>
>             <input type="text" name="accountnaam" id="accountnaam" maxlength="100"/><br><br><br>
> 
>             Wachtwoord:<br><br>
>             <input type="text" name="wachtwoord" id="wachtwoord" maxlength="100"/><br><br><br>
> 
>             <input type="submit" name="inlogknop" id="inlogknop" value="inloggen"/>
>         </form> <?php  }  if(isset($_POST['inlogknop'])) {
>               if(!empty($_POST['accountnaam']) && !empty($_POST['wachtwoord'])){
>                       if(($xinlognaam == $_POST['accountnaam']) && ($xwachtwoord == $_POST['wachtwoord'])){
>               
>               $_SESSION['user'] = $xinlognaam;
>                 header('Location: ../php/cms.php');           } else {
>           
>               echo"De ingevulde login informatie is incorrect.";
>                           }
>                   }else {
>                       echo"De ingevulde login informatie is incorrect.";      }   }    ?>