четверг, 11 марта 2010 г.

Как сбросить HTTP-авторизацию (пример на PHP)

Иногда бывает необходимо защитить паролем одну страницу на сайте. Не всегда хочется использовать для этого сессии и прочие php заморочки. Для таких случаев удобно использовать HTTP-авторизацию.
Однако у нее есть один недостаток: нет нормального способа отлогиниться от страницы. Т.е. не закрывая браузер вы никак не сможете выйти из защищенной области так, чтобы при повторном входе страница снова потребовала бы у вас пароль.
На эту тему есть интересный трикс. Нужно снова зайти на страницу с заведомо не правильным логином и паролем. Сделать это можно, послав пользователя по ссылке вида:

http://user:pass@you-domain.com/you-page

Таким образом вы можете осуществить сброс HTTP авторизации. Конечно user и pass не должны быть зарегистрированы в системе.

Вот вам пример защищенной страницы на PHP:
<?php
 $admin_user='admin';
 $admin_password='12345';

 $request_path=parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

 if(isset($_GET['logout'])) {
  header("Location: http://x:x@".$_SERVER['SERVER_NAME'].$request_path);
 } elseif(@$_SERVER['PHP_AUTH_USER']!=$admin_user || @$_SERVER['PHP_AUTH_PW']!=$admin_password) {
  header('WWW-Authenticate: Basic realm="Please login"');
  header('HTTP/1.0 401 Unauthorized');
  die("Access forbidden");
 }

 echo '<h1>This page protected by http authorization.</h1>';

 echo '<a href="'.$request_path.'?logout">logout</a>';
?>

Кстати, трикс придумал не я, а подсмотрел его у Jacob Wright.

2 комментария:

dudev комментирует...

Кривовато работает, если дальше снова пытаться авторизоваться

Green FiLin комментирует...

Да, не лучший способ. Но другого и нет.

Отправить комментарий