|
|
|
| в скрипте авторизации выложенном в downloads есть возможность входа, и пока не закроется браузер никак нельзя выйти, а как сделать выход в данном скрипте, по нажатии кнопки?
<?php
///////////////////////////////////////////////////
// Система авторизации HTTP-Basic авторизации
// 2003-2005 (C) IT-студия SoftTime (http://www.softtime.ru)
// Симдянов И.В. (simdyanov@softtime.ru)
///////////////////////////////////////////////////
// Устанавливаем соединение с базой данных
require_once("config.php");
// Если пользователь не авторизовался - авторизуемся
if(!isset($_SERVER['PHP_AUTH_USER']))
{
Header("WWW-Authenticate: Basic realm=\"Admin Page\"");
Header("HTTP/1.0 401 Unauthorized");
exit();
}
else
{
// Утюжим переменные $_SERVER['PHP_AUTH_USER'] и $_SERVER['PHP_AUTH_PW'],
// чтобы мышь не проскочила
if (!get_magic_quotes_gpc())
{
$_SERVER['PHP_AUTH_USER'] = mysql_escape_string($_SERVER['PHP_AUTH_USER']);
$_SERVER['PHP_AUTH_PW'] = mysql_escape_string($_SERVER['PHP_AUTH_PW']);
}
$_SERVER['PHP_AUTH_USER'] = str_replace("'","`",$_SERVER['PHP_AUTH_USER']);
$_SERVER['PHP_AUTH_PW'] = str_replace("'","`",$_SERVER['PHP_AUTH_PW']);
$query = "SELECT pass FROM userlist WHERE name='".$_SERVER['PHP_AUTH_USER']."'";
$lst = @mysql_query($query);
// Если ошибка в SQL-запросе - выдаём окно
if(!$lst)
{
Header("WWW-Authenticate: Basic realm=\"Admin Page\"");
Header("HTTP/1.0 401 Unauthorized");
exit();
}
// Если такого пользователя нет - выдаём окно
if(mysql_num_rows($lst) == 0)
{
Header("WWW-Authenticate: Basic realm=\"Admin Page\"");
Header("HTTP/1.0 401 Unauthorized");
exit();
}
// Если все проверки пройдены, сравниваем хэши паролей
$pass = @mysql_fetch_array($lst);
if(md5($_SERVER['PHP_AUTH_PW']) != $pass['pass'])
{
Header("WWW-Authenticate: Basic realm=\"Admin Page\"");
Header("HTTP/1.0 401 Unauthorized");
exit();
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Bvz
(30.12.2009 в 08:37)
| | это невозможно
[поправлено модератором] | |
|
|
|
|
|
|
|
для: Bvz
(30.12.2009 в 08:37)
| | Возможно. Послать юзера на
http://blablabla:blablabla@ваш_сайт.com/этот_скрипт.пхп
| вместо blablabla - любое несуществующее имя. | |
|
|
|
|
|
|
|
для: ~AquaZ~
(30.12.2009 в 14:55)
| | неужели все так безнадежно? | |
|
|
|
|
|
|
|
для: Bvz
(30.12.2009 в 15:14)
| | В этом плане данный способ аутентификации не очень удобный... | |
|
|
|
|
|
|
|
для: cheops
(31.12.2009 в 13:09)
| | Cheops, у меня такой вопрос - вроде бы, в коде происходит запись в
$_SERVER['PHP_AUTH_USER'] = mysql_escape_string($_SERVER['PHP_AUTH_USER']);
$_SERVER['PHP_AUTH_PW'] = mysql_escape_string($_SERVER['PHP_AUTH_PW'])
| Почему же невозможно туда записать пустую строку? | |
|
|
|
|
|
|
|
для: Commander
(01.01.2010 в 13:12)
| | Не очень понятно, в смысле пустую строку? | |
|
|
|
|
|
|
|
для: cheops
(01.01.2010 в 15:50)
| | >Не очень понятно, в смысле пустую строку?
$_SERVER['PHP_AUTH_USER'] = '';
$_SERVER['PHP_AUTH_PW'] = ''
| Пробовал так, не работает. | |
|
|
|
|
|
|
|
для: Bvz
(30.12.2009 в 15:14)
| | Да. Это всё браузерная сторона. С сервера ничего не поделаешь. | |
|
|
|
|
|
|
|
для: Bvz
(30.12.2009 в 08:37)
| | Я тоже хотел на этом коде выход реализовать - застрял на обнулении переменных. Проще реализовать на сессях. | |
|
|
|
|
|
|
|
для: Commander
(01.01.2010 в 13:09)
| | Ясно, тут для всех мой совет - пустое слово... | |
|
|
|
|
|
|
|
для: ~AquaZ~
(05.01.2010 в 20:05)
| | Да, это так | |
|
|
|
|
|
|
|
для: Вурдалак
(06.01.2010 в 03:09)
| | Да иди ты... | |
|
|
|