PHP в деталях



         

Пароль на страницу. Часть 5. Сессии - часть 4


  session_start();

  session_register("user");

  

  /* если случайно в массиве нет логина и пароля, работа тоже прекращается ("ничего не знаем, мы вам их давали") */

  if (!isset($user["login"]) !isset($user["pass"]))

    $session_error = true;

  };

/* если пользователю до сих пор удалось геройски избежать ошибок, делается проверка через базу так же, как и на входе. */

if (!$session_error) {

  $check_result = mysql_query("SELECT uid FROM user WHERE login='{$user[login]}' AND pass='{$user[pass]}'");

  if (mysql_error() @mysql_num_rows($user_result) != 1)

    $session_error = true;

  };

// если была какая-то ошибка, то

if ($session_error) {

  

  // уничтожаем данные сессии

  session_destroy();

  // уничтожаем куку, если она была

  if (!isset($HTTP_COOKIE_VARS[session_name()]))

    setcookie(session_name(),"","/");

  /* отправляем пользователя на вход, с возможностью вернуться на запрошенный адрес */

  header("Location: /login.php?return=$REQUEST_URI");

  // прекращаем работу

  exit();

  };

mysql_free_result($check_result);

Пользователь проверен и в массиве $user ? все данные о нём, можно, например, поприветствовать его по имени-отчеству:

<?

include("auth.inc");

?><html>

<head><title><? print ("Здравствуйте, {$user[fname]} {$user[sname]}!"); ?></title></head>

<body>

[skip]

И выход:

if(isset($HTTP_COOKIE_VARS[session_name()])) {

  // запуск механизма сессий

  session_start();

  // удаление файла

  session_destroy();

  // удаление куки

  setcookie(session_name());

  };

// выход со страницы

header("Location: /login.php");

Пара замечаний: закрываемая паролем часть в данном примере - весь сервер (например, service.firm.ru), для закрытия директории нужно исправить пути. Вместо PHPSESSID используется session_name(), чтобы можно было свободно менять имя идентификатора. Кстати, на одном физическом сервере можно делать разные имена идентификаторов сессий - достаточно в нужную часть положить файл .htaccess со строкой php_value session.name "ABRACADABRA".

На этом всё. Ждите статьи со сравнением приведённых способов авторизации (свои куки, сессии и 401-й код) и нескольких статей по сессиям.




Содержание  Назад  Вперед