【发布时间】:2015-10-09 20:37:10
【问题描述】:
我正在尝试在我们的网站上创建一个相当简单但有效的维护设置。该函数的工作方式是,如果用户登陆站点上的任何页面,除了
https://www.ourbusiness.org/assets/home2.do/unlock-maintenance和https://www.ourbusiness.org/legal/all之外,header()函数将启动并将用户重定向到https://www.ourbusiness.org/error/offline/。我看过其他问题,尤其是this one,但在这个问题中,我认为可以改进;通过添加这么少量的代码。
首先是我们的config.php 文件:
Config.Run.php:
<?php
define("URL", "https://www.ourbusiness.org");
define("MAINTENANCE", "1");
if(MAINTENANCE == 1) {
if(!isset($_SESSION['MAINTENANCE_UNLOCK'])) {
header("Location: ".URL."/error/offline/");
}
}
unlock-maintenance.php
<?php
include "Config.Run.php";
session_start();
if(isset($_POST)) {
if($_POST['username'] == "admin" && $_POST['password'] == "admin") {
$_SESSION['MAINTENANCE_UNLOCK'] = md5($_POST['username'].$_POST['password']);
header("Location: ".URL."");
}
}
?>
<form action="" method="post">
<h1>You are not logged in</h1>
<b>Username: </b><input type="text" name="username" />
<b>Password: </b><input type="password" name="password" />
<input type="text" value="Unlock <?php echo TITLE; ?>" />
</form>
为什么这不起作用?我什至无法访问该文件来解锁网站,也无法访问目录legal中的任何页面
【问题讨论】:
-
在包含试图将会话用于一件事的 php 文件之后,您正在调用
session_start()。另一件事 - 每个用户都有自己的会话,不应该“解锁”维护是全局的,即首先不基于会话吗? -
@JamesThorpe 维护设置是全局的,它由
MAINTENANCEconst 控制。会话变量允许用户只为自己覆盖设置(例如站点管理员)。 -
md5($_POST['username']lordie,不要使用它,不要用于密码存储。也许.......也许回到 1992 年的第一个月左右。 -
@Dai 是的,我现在明白了。尽管如此,
session_start()还是需要先调用。 -
这不是为了安全,它只是在网站停止维护之前解锁网站的一种方式,这样我们就可以看到更新是如何生效的。
标签: php maintenance maintenance-mode