我正在一个网站上工作,我决定为它制作自己的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");
?>
答案 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."; } } ?>