我正在一个网站上工作,我决定为它制作自己的CMS。它不需要惊人的安全性,但我有一个登录页面,如果登录信息填写正确,它会指向CMS页面。
只能使用1个帐户(管理员)登录。它的登录名和密码是在登录页面PHP文件中设置的。当提交表单时,它会检查是否填写了正确的信息,如果填写了,它会将用户名放入SESSION[user]变量中。
只要该会话存在,登录页面就应该始终自动将您引导到CMS页面,但这似乎只能在本地工作。当我把它放在网上,填写正确的信息并在登录页面上提交表格时,它只是停留在同一页面上,而不是转到CMS页面。当我手动键入cms页面的URL时,我可以访问它,而无需指向登录页面。在我的PHP中,我确实检查$_SESSION['user']==admin。
你们中有人知道为什么这只在本地工作,我需要改变什么才能让它在网上工作吗?
以下是相关代码:
//登录PHP页面
<?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页面
<?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");
?>
首先,内容发送到浏览器后,不能设置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>
用于重定向的header()
函数只有在尚未发送任何内容的情况下才起作用。发送内容后,无法修改HTTP标头,因为它已经从服务器发送到客户端。
这意味着,如果将对header()
的调用放在任何HTML之后(即使它只是一个<html>
标记或单个echo
,甚至是打开<?php
之前的一个空格),它也可能不起作用。我说可能,因为有时服务器在生成的那一刻并没有发送所有内容,因此仍然可以编辑HTTP标头。
因此,解决方案是将header()
调用移动到页面的最顶部。更多信息可以在PHP文档中找到。
此外,不要将您的密码发布到Stack Overflow。:-)
这将解决您的问题:
> <?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."; } } ?>