Перейти к содержимому


Партнерская программа Kredov

Как сделать разавторизацию?

#1 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71
0

Отправлено 30 Декабрь 2009 - 10:16

в скрипте авторизации есть возможность входа, и пока не закроется браузер никак нельзя выйти, а как сделать выход в данном скрипте, по нажатии кнопки?

<?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();
}
}
?>

 

 

  • 0

#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 02 Январь 2010 - 23:51

sc2r2bey, попробуй просто удалить глобальные переменные.
if ( выход )
{
unset($_SERVER['PHP_AUTH_USER']);
unset($_SERVER['PHP_AUTH_PW']);
}

  • 0

#3 gaaarfild

gaaarfild
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 13 Март 2010 - 03:09

или даже еще проще. session_destroy();
Эффект такой же, как если закрыть браузер. =)

А, ну да. Здесь нет сессий. =) Тогда Unset. =)

Но лучше сессии. =) Они безопаснее, ибо их сложнее подменить.
  • 0

#4 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 13 Март 2010 - 11:34

в общем с разахивизацией здесь ничего не выйде - утопия :P
  • 0

#5 phpuser

phpuser
  • Пользователь
  • 520 сообщений
  • Репутация: 8

Отправлено 13 Март 2010 - 13:22

Делай с помощью сессий и всё у тебя получится.


  • 0
Вникаю в тему создания сайтов...


#6 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 13 Март 2010 - 17:49

как?
  • 0

#7 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 13 Март 2010 - 23:09

sc2r2bey,
1) Пользователь вводит логин и пароль, его отправляют на проверку
2) Если такой пользователь присутствует в базе, создаём сессию:
2.1) Вначале скрипта обязательно надо инициализировать сессии
session_start();

2.2) Затем нужно создать переменные сессии, к примеру так
$_SESSION['login'] = "логин";
$_SESSION['password'] = "пароль";

3) При обращении к странице, надо проверять наличие переменных в сессии, и если их нет отправлять на авторизацию, а если есть, лучше повторно проверить
4) Выход из авторизованной зоны осуществляется удалением сессии
session_destroy();

  • 0

#8 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 13 Март 2010 - 23:44

а насколько оправданное логин и пароль хранить в сессии?
  • 0

#9 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 14 Март 2010 - 00:09

sc2r2bey, логин и пароль хранить оправдано тем, что данные хранятся не у пользователя, а на сервере. Доступ к ним может получить только скрипт по ID-сессии. А вот ID-сессии хранится в куках у пользователя, или передаётся в GET-параметре между страницами.
В HTTP данные передаются по незашифрованному каналу, так что получить некие данные можно будет и при общении пользователя со скриптом. Сам этим не практиковался...
  • 0

#10 BaCo

BaCo
  • Пользователь
  • 103 сообщений
  • Репутация: 0

Отправлено 18 Март 2010 - 17:43

Можно шифровать пароль с помощью функции md5().
Тогда его долго придется расшифровывать.
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru