Написал на php страничку, вход в которую возможен только после ввода пароля, кроме того имеются три пары логин/пароля от которого зависят содержимое странички.
Код такой:
<?
header("Expires: Sat, 01 Jan 2000 00:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: post-check=0, pre-check=0",false);
header("Pragma: no-cache");
session_cache_limiter("public, no-store");
session_start();function http_auth()
{
$_SESSION['AUTH'] = 1;
header('HTTP/1.0 401 Unauthorized');
header('WWW-Authenticate: Basic realm="Welcome to company"');
// The actions to be done when the user clicks on 'cancel'
echo "Unauthorized";
exit();
}
if( !isset($_SERVER['PHP_AUTH_USER']) or @$_SESSION['AUTH'] != 1 )
{
http_auth();
exit();
}echo "<html>";
echo "<head>";
echo "<META http-equiv='content-type' content='text/html; charset=windows-1251'>";
echo "<link rel=stylesheet href=../set/bill.css type='text/css'>";$login_pass_file = file("/usr/local/apache/secret/userpass");
foreach ($login_pass_file as $login_pass) {
list($login,$pass) = explode(';',rtrim($login_pass));
}
if ($_SERVER['PHP_AUTH_USER']=="login1" && $_SERVER['PHP_AUTH_PW']=="pass1") {
$ip=$login;
$ip_pw=$pass;
$adv_table=0;
} elseif ($_SERVER['PHP_AUTH_USER']=="login2" && $_SERVER['PHP_AUTH_PW']=="pass2") {
$ip=$login;
$ip_pw=$pass;
$adv_table=1;
} else {
exit();
}
...
echo "content_of_site";
?>Сегодня обнаружил, что когда на диалоговом окне нажимаешь Отмена, затем из браузера Назад, а потом опять идешь по ссылке страница открывается без запроса пароля.
Как это запретить?????
>Как это запретить?????ставить и проверять куки??
>Написал на php страничку, вход в которую возможен только после ввода пароля,
>кроме того имеются три пары логин/пароля от которого зависят содержимое странички.
>
>Код такой:
>function http_auth()
>{
!2> $_SESSION['AUTH'] = 1;
> header('HTTP/1.0 401 Unauthorized');
!1> header('WWW-Authenticate: Basic realm="Welcome to company"');
> // The actions to be done when the
>user clicks on 'cancel'
> echo "Unauthorized";
> exit();
>}
(кут)
>
>Сегодня обнаружил, что когда на диалоговом окне нажимаешь Отмена, затем из браузера
>Назад, а потом опять идешь по ссылке страница открывается без запроса
>пароля.
>Как это запретить?????
Всё очень просто.
В месте !1 ты объявляешь заголовок аутентификации. Поэтому прошла она или нет, параметр PHP_AUTH_USER заполняется. И я так подозреваю что в случае "Отмена-Назад-Вперед" она заполняется пустой строкой. Но пустая строка это всё-таки isset($var). Поэтому ты по сути два раза (см. !2) делаешь одну и ту же проверку.Можно проверку заменить. В голову приходит два варианта:
1. if( empty($_SERVER['PHP_AUTH_USER']) )
здесь есть два ньюанса.
- Во-первых в случае error_reporting(E_ALL & E_NOTICE) ты получишь замечание что индекс PHP_AUTH_USER не определен при первом заходе на страницу. Обходится так:
if (!isset($_SERVER['PHP_AUTH_USER']) || empty($_SERVER['PHP_AUTH_USER']))...
)
- Во-вторых ... а кто его знает, мало ли - есть фича/бага прохождения аутентификации с пустым логином. Обходится проверкой логина.
if ( !myCheckLogin($_SERVER['PHP_AUTH_USER']) )...,
где myCheckLogin($str) это что-то вроде return in_array($str, $correctLogins);2. таки использовать $_SESSION['AUTH']. Т.е.
if ($_SERVER['PHP_AUTH_USER']=="login1" && $_SERVER['PHP_AUTH_PW']=="pass1") {
$ip=$login;
$_SESSION['AUTH'] = 1;
...
,... для других паролей то же самое
а в проверке:
if ( !isset($_SESSION['AUTH']) || ( -1 != $_SESSION['AUTH'] ) )...отказНадеюсь что-то можно разобрать... может быть не очень понятно объяснил, могу показать на полном коде. l4igem(два)(кусака)list(тчк)ру