HTTP-аутентификация

Сессии

Cookies

– это текстовые записи (строки), хранящиеся на стороне клиента, и содержащие пары "имя-значение", с которыми связан URL, по которому браузер определяет, нужно ли посылать cookies на сервер.

Внимание: куки устанавливаются для браузера. Т.е. пользователь может получить к ним доступ и изменить их. Также, если пользователь использует несколько браузеров, куки, установленные в одном из них, не будут доступны в другом.

 

Устанавливаются при помощи функции:

bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )

$name – идентификатор, имя записи,

$value – значение,

$expire – абсолютное время истечения срока действия (по умолчанию 0 = до конца сеанса = до закрытия окна браузера),

$path – путь (внутри домена) ('/' – all), для которого действительна запись,

$domain – домен/поддомен, для которого действительна запись,

$secure – в случае true запись устанавливается только при использовании защищенного протокола HTTPS,

$httponly – в случае true доступ к установленной записи предоставляется только через протокол HTTP, т.е. для серверных скриптов, но не для клиентских (таких как Java Script) (PHP5.2+).

 

Т.к. куки передаются в заголовке ответа сервера, они должны быть установлены до какого-либо вывода данных (например при помощи echo/print).

Значение установленных куки доступно через суперглобальные массивы $_COOKIE ($HTTP_COOKIE_VARS), $_REQUEST.

 

Пример:

 

If (!isset($_COOKIE["TestCookie"]) {

setcookie("TestCookie", $value);

setcookie("TestCookie", $value, time()+3600, ‘/’, ‘test.com’);

}

echo $_COOKIE["TestCookie"];
echo $HTTP_COOKIE_VARS["TestCookie"];

 

Также могут устанавливаться куки-массивы:

setcookie("cookie[three]", "cookiethree");

setcookie("cookie[two]", "cookietwo");
if (isset($_COOKIE['cookie'])) {
foreach ($_COOKIE['cookie'] as $name => $value) {}

}

 

Удаление куки производится путем их установки «в прошлое», т.е. $expire со значением прошедшего времени.

 

– другой способ сохранения информации о посетителе, на стороне сервера (что является более надежным). Последовательность действий:

  • открытие сессии;
  • регистрация переменных сессии и их использование;
  • закрытие сессии.

Каждому посетителю сайта присваивается уникальный идентификатор, называемый идентификатором сессии (session id). Он хранится либо в cookie на стороне пользователя, либо может передаваться методом GET через URL. Если идентификатор передан при запросе страницы сайта – PHP загружает данные сессии и «продолжает» сохраненную сессию, если нет – создает новую. Проверка осуществляется автоматически (если установлена директива session.auto_start в конфигурационном файле php.ini) или при обращении скрипта к информации о сессии).

Данные сессии хранятся в суперглобальном массиве $_SESSION. ($HTTP_SESSION_VARS)

 

bool session_start ( void ) – запуск/продолжение сессии. Как и функции установки куки, должна вызываться до вывода данных.

string session_id ([ string $id ] ) – возвращает ИД текущей сессии / назначает ИД.

SID – константа содержащая ИД сессии в формате name=ID, пуста если идентификатор передан в кукисах.

bool session_destroy ( void ) – уничтожает данные связанные с сессией. При этом куки и данные в глобальных массивах необходимо очистить отдельно. Автоматическое уничтожение сессии также происходит при закрытии пользователем окна браузера.

 

Пример:

 

<?php // page1.php
session_start();

echo 'Welcome to page #1';

$_SESSION['favcolor'] = 'green';
$_SESSION['animal'] = 'cat';
$_SESSION['time'] = time();

// Works if session cookie was accepted
echo '<br /><a href="page2.php">page 2</a>'; // Or maybe pass along the session id, if needed
echo '<br /><a href="page2.php?' . SID . '">page 2</a>';
?>

 

<?php // page2.php
session_start();
echo 'Welcome to page #2<br />';

echo $_SESSION['favcolor']; // green
echo $_SESSION['animal']; // cat
echo date('Y m d H:i:s', $_SESSION['time']);

// You may want to use SID here, like we did in page1.php
echo '<br /><a href="page1.php">page 1</a>';
?>

 

Возможно использовать функцию header() для посылки сообщения "Authentication Required" браузеру. После ввода скрипт будет вызван повторно, с предопределенными переменными PHP_AUTH_USER, PHP_AUTH_PW, и AUTH_TYPE, установленными в логин, пароль и тип аутентификации соответственно (в массивах $_SERVER и $HTTP_SERVER_VARS). Поддерживаются оба два типа аутентификации: "Basic" и "Digest" (начиная с версии PHP 5.1.0).

 

void header ( string $string [, bool $replace = true [, int $http_response_code ]] )

 

Пример скрипта базовой аутентификации:

 

<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Текст, отправляемый в том случае,
если пользователь нажал кнопку Cancel';
exit;
} else {
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>Вы ввели пароль {$_SERVER['PHP_AUTH_PW']}.</p>";
}
?>