2015-10-09 4 views
-1

Я пытаюсь создать довольно простой, но эффективный режим обслуживания на нашем сайте. Способ, которым должна работать эта функция, заключается в том, что пользователь приземляется на любую страницу на сайте, за исключением 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/"); 
    } 
} 

разблокировке-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

+1

Вы звоните 'session_start()' после того, как включая файл php, который пытается использовать сеанс для одной вещи. Другое дело - каждый пользователь будет иметь свой собственный сеанс, не должен «разблокировать» обслуживание глобальным, то есть не основанным на сеансах в первую очередь? –

+0

@JamesThorpe Настройка обслуживания является глобальной, она контролируется конструкцией 'ТЕХНИЧЕСКОЕ ОБСЛУЖИВАНИЕ'.Переменная сеанса позволяет пользователю переопределить параметр только для себя (например, администратор сайта). – Dai

+0

'md5 ($ _ POST ['username']' lordie, не используйте это, а не для хранения паролей. Может быть, ....... возможно, возможно, только в 1992 году в течение первого месяца или около того. –

ответ

-1

Имейте в виду, если кто-нибудь решит использовать это, что не самый безопасный система аутентификации

Я решил эту проблему после того, как некоторые мастерить с нашим кодом - Я придумал решение и это очень эффективно. Пожалуйста, смотрите наши результаты ниже:

Внутри нашего Config.Run.php:

define("URL", "https://www.ourbusiness.org"); 
define("MAINTENANCE", "1"); 

if(MAINTENANCE == 1) { 
    if(!isset($_SESSION['MAINTENANCE_UNLOCK'])) { 
     $current_file = explode('/', getcwd()); 
     $current_file = end($current_file); 
     if ($current_file !== 'unlock-maintenance' && $current_file !== 'offline') { 
      header("Location: ".URL."/error/offline/"); 
      exit(); 
     } 
    } 
} 

И внутри нашего разблокировки-обслуживания каталога (файла по умолчанию index.php)

<h2>Maintenance log in</h2> 
<?php 
if(isset($_POST) && !empty($_POST)) { 
    if($_POST['username'] == "admin" && $_POST['password'] == "admin") { 
     $_SESSION['MAINTENANCE_UNLOCK'] = md5($_POST['username'].$_POST['password']); 
     header("Location: ".URL.""); 
    } else { 
     echo '<p class="err_msg">That login attempt failed, please try again.</p>'; 
    } 
} else { 
    echo '<p>You must login using your username and password.</p>'; 
} 

?> 
<form action="" method="post"> 
    <div class="input_group"> 
     <label>Username</label> 
     <input type="text" class="input" name="username" value=""> 
    </div> 
    <div class="input_group"> 
     <label>Password</label> 
     <input type="password" class="input" name="password" value=""> 
    </div> 
    <input type="submit" value="Login" /> 
</form> 

Я надеюсь, что это поможет любому, кто ищет достаточно хорошую систему обслуживания.

Помните, что вы можете добавить дополнительные функциональные возможности для этой надстройки выхода из системы связи, изменения заголовка/нижний колонтитул включает в зависимости, если вход в системе или нет и т.д.

0

Короткий ответ ....

session_start(); 

if(isset($_POST)) { 
    if($_POST['username'] == "admin" && $_POST['password'] == "admin") { 
     $_SESSION['MAINTENANCE_UNLOCK'] = md5($_POST['username'].$_POST['password']); 
     header("Location: ".URL.""); 
    } 
} 

include "Config.Run.php"; 

ТАКЖЕ .. другой сценарий сделать ..

if(MAINTENANCE == 1 && !isset($_SESSION['MAINTENANCE_UNLOCK'])) { 
     header("Location: ".URL."/error/offline/"); 
    } 
} 

..переключить их выше, подать. Я знаю, что должен включать детали, но они в комментариях.

+0

Я получаю ошибку TOO_MNY_REDIRECTS –

+0

@RRAWebteam - похоже, что ваш сеанс var не сохраняется. Вы положили session_start() вверху, как в моем примере? –

+0

Я сделал все, как указано выше ... Но теперь, когда я пытаюсь получить доступ к странице разблокировки, я перенаправляюсь на страницу офлайн. –

Смежные вопросы