Про HTTP authentication with PHP

  • Автор темы Саня
  • Дата начала

Саня

Guest
Про HTTP authentication with PHP

Заранее извиняюсь за демогогию.

Есть сайт, на котором используется HTTP authentication with PHP типа
PHP:
<?php
if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
  $r = mysql_query("SELECT id FROM users WHERE username=$_SERVER['PHP_AUTH_USER']  AND password=$_SERVER['PHP_AUTH_PW']");
  if (mysql_num_rows($r) == 0) {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    exit;
  }
} else {
  header('WWW-Authenticate: Basic realm="My Realm"');
  header('HTTP/1.0 401 Unauthorized');
  exit;
}
?>
У авторизованного пользователя есть возможность изменить свои данные, в том числе имя пользователя и пароль.
Если он их изменяет, то программа просит по новой залогиниться. Это происходит от того, что браузер посылает скрипту старые значения переменных $_SERVER["PHP_AUTH_USER"] и $_SERVER["PHP_AUTH_PW"], которые не совпадают с изменёнными данными.
Поскольку переменные $_SERVER["PHP_AUTH_USER"] и $_SERVER["PHP_AUTH_PW"] хранятся в браузере, то из скрипта их изменить не возможно.
Стало быть, чтобы сделать так, чтобы пользователю после изменения своих данных не надо было снова логиниться, надо изменить всю систему авторизации.

Всё ли правильно в моём рассуждении? Есть ли, всё-таки, какая-нибудь возможность, не меняя систему авторизации пользователей, сделать так, чтобы после данных действий пользователю не приходилось перелогиниваться?
 

Саня

Guest
Спасибо. Жаль...

-~{}~ 09.09.04 18:16:

А как дать пользователю возможность выйти из системы?
Где-то было, что достаточно послать в браузер заголовок header( 'status: 401 Unauthorized' );. Не подействовало.
 

Саня

Guest
Действие, аналогичное тому, что происходит при нажатии на ссылку "выход" внизу этой страницы. Иными словами, logout.
 

KES

Guest
Есть вариант с сессиями:
1) Если в юзер не залогинен, то послать клиенту
PHP:
header('WWW-Authenticate: Basic realm="My Realm"'); 
header('HTTP/1.0 401 Unauthorized');
2) После успешной авторизации записать в $_SESSION['authorized']=1

Код примерно изменится следующим образом:
PHP:
if ($_SESSION['authorized']!=1)
  {
  твой скриптик
  .......
  Если пользователь авторизировался, то $_SESSION['authorized']=1; else $_SESSION['authorized']=0;
  }
 

Фанат

oncle terrible
Команда форума
Саня
пиши статус пользователя туда же, где лежит его логин и пароль.

KES, можно вопросик?
Тебе не кажется, при таком подходе, здесь что-то лишним?
К примеру, НТТР авторизация?
 
Сверху