Профессиональная разработка Web-приложений.  
Боишься нашего дизайна?
Новости
PDF журнал
Участники проектa
Сотрудничество
Ссылки
Карта сайта
Комментарии
Комментарии к статье
Добавить комментарий
Обсудить на форуме
Информация об авторе
Оценка статьи

Пароль на страницу, часть 2

Как авторизовывать пользователя через куки (cookies)
Идентификация пользователя через встроенный в php 4 механизм сессий.

Пароль на страницу. Часть 4. Печенюшки

Способ этот применим там, где, во-первых, пользователей много, и их контингент постоянно меняется. Во-вторых, где нужно сделать удобный вход - чтобы можно было зайти в систему, введя логин и пароль в форме на странице.

Рисуем форму и делаем файл, который получает логин и пароль (защиту от подборки я уде описывал, допишите её сюда сами).

// обработка строки с логином
$login = str_repalce("'", "", $login);

$login_result = mysql_query("SELECT id FROM user WHERE 
  login='$login' AND pass='". md5($pass). "'");

if (!mysql_error() && @mysql_num_rows($login_result)==1) {

/* выдача кук. Имена кук и путь лучше во избежание путаницы определять
 в едином подключаемом файле. */
  setcookie($COOKIE_LOGIN_NAME, $login, time()+3600, $COOKIE_PATH);
  setcookie($COOKIE_PASSW_NAME, $pass, time()+3600, $COOKIE_PATH);

/* Сразу же после входа пользователя перенаправляют на закрытый паролем адрес. */
  header("Location: /somepath/");
  exit;
  }
elseif (!mysql_error()) {

/* вывод сообщения об ошибке и формы для повторного ввода */
  print ("Неправильный логин или пароль.");
  }
else
  print (mysql_error());

Все закрытые страницы вызывают файл, в котором проверяется правильность пароля, полученного из куки:

$login = str_repalce("'", "", $HTTP_COOKIE_VARS[$COOKIE_LOGIN_NAME]);
$login_result = mysql_query("SELECT id FROM user WHERE 
  login='$login' AND pass='". md5($HTTP_COOKIE_VARS[$COOKIE_PASSW_NAME]). "'");

if (!mysql_error() && @mysql_num_rows($login_result)!=1) {

/* Если такой строки в таблице нет, пользователь перенаправляется на страицу входа. */
  header("Location: /login.php");
  exit;
  }
else
  print (mysql_error());

Имена кук будут использоваться в нескольких местах, поэтому лучше заранее поместить их в одном месте (например, объявив константы), чтобы потом не исправлять по нескольку раз.

Как видите, пароль будет бегать по каналу и лежать в файле с куками в открытом незакодированном виде. Это очень небезопасно. В отсутствие хозяина можно подойти к компьютеру, заглянуть в файл, где броузер держит куки, и записать пароль на бумажку (а если в локальной сети всё общее, то и подходить не надо, и стащить пароль можно прямо при хозяине).

Чтобы этого не произошло, пароль нужно кодировать. Как приемлемый вариант, хэш md5. Тут уже нельзя увидеть пароль и зайти в систему, записав его на бумажку или copy-paste-нув. Кстати, именно так можно залазить под паролем и без ведома друга в web-интерфейсы, строящие авторизацию на сессиях. Поэтому последнее, что можно сделать в этом направлении - это менять куку при каждой загрузке страницы.

Сам когда-то делал такую схему: в таблице пользователей есть колонка с датой последнего обращения. Эту дату последнего обращения и пароль, закодированные через md5, пользователь получает при каждом обращении. Система берёт куку с логином, вытаскивает из базы эту строку, генерирует хэш от полей last_log и passwd и сравнивает его с полученным. Если они совпадают, значит посетителя можно впускать. Для пущей безопасности можно добавить проверку на истечение куки - кука должна истечь после получаса неактивности, и, соответсвенно, в базе дата последнего лога должна быть менее чем полчаса назад.

$login = str_repalce("'", "", $HTTP_COOKIE_VARS[$COOKIE_LOGIN_NAME]);
$login_result = mysql_query("SELECT * FROM user WHERE 
  login='$login' AND last_log>DATE_SUB(NOW(), INTERVAL 30 MINUTE)");

if (!mysql_error() && @mysql_num_rows($login_result)==1) {
/* Получаем строку таблицы и формируем хэш от нужных полей. */
  $current_user = mysql_fetch_array($login_result);
  $hash_to_check = md5($current_user["passwd"]. " Ы - чтоб никто не догадался ".
                   $current_user[log_time]);
  
  if ($hash_to_check == $HTTP_COOKIE_VARS[$COOKIE_HASH_NAME]) {
    $current_time = time();
/* Обновление поля последнего входа и выдача новой куки. */
    mysql_query("UPDATE user SET last_log='". date("Y-m-d H:i:s", $current_time). "' 
      WHERE login='$login'");
    setcookie($COOKIE_HASH_NAME, md5(date("Y-m-d H:i:s", $current_time). 
        " Ы - чтоб никто не догадался ". 
        $current_user["passwd"]), $current_time + 1800, $COOKIE_PATH);
    }
  else {

/* В случае несовпадения хэша пользователь перенаправляется на страицу входа в систему. */
    header ("Location: /login.php");
    exit;
    };
  }
elseif (!mysql_error() && @mysql_num_rows($log_result)!=1) {
  header("Location: /login.php");
  exit;
  }
else
  print (mysql_error());

Разумеется, " Ы - чтоб никто не догадался " лучше тоже выделить в отдельную переменную, а лучше использовать вместо этой строки ip-адрес посетителя (или, для обрывающегося диалапа, первые два/три числа ip-адреса).

Кстати, насчёт IP-адреса. Его лучше проверять, но не весь адрес, а только первые два (для ip, начинающихся на число меньше 127) или три (соответственно, больше 127) числа адреса. Это спасёт пользователей плохого и обрывающегося диалапа от необходимости заново авторизовыватсья после обрыва связи, и в то же время, не даст зайти взломщику, укравшему куку. Конечно же, он не сможет перезвонить и зайти через другого провайдера - адрес пула не тот, но это не наши проблемы ("в такую погоду свои дома сидят"). Как не наша проблема и воровство паролей внутри фирмы. Мы защитили от любопытных товарищей и неграмотных взломщиков, а против троянов и снифферов, которые можно поставить жертве, ничего сделать не можем.

На этом "навороты" закончились. Надёжнее защиту уже не сделать. Никто не будет лазить в файл кук за хэшем и подбирать его. Проще будет поместить между пользователем и веб-интерфейсом сниффер и при помощи него найти пароль. Можно поместить трояна, который будет запоминать всё, что пользователь ввёл на клавиатуре, но это уже не наши проблемы. Чтобы защититься от прослушивания канала, надо использовать соединения типа SSL или шифрование данных.

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

Зачем я писал заметку про куки? "Не понимаю, зачем писать про куки, когда в php есть сессии?!" Затем, чтобы у читателей не образовывалась перед глазами плоская картина. Не везде ещё стоит php 4-й версии, а в третьей они не поддерживаются. Более того, не везде сессии так необходимы — за редким исключением алгоритм авторизации проверяет правильность логина/пароля и правильность данных сессии, а затем либо отфутболивает клиента на страницу входа, либо берёт массив (или объект) с данными о пользователе.

Случаев, когда работа сессиями необходима, не так уж и часты. Например, в своей игре "Монополист" я сразу стал использовать сессии, потому что пользователь может играть в нескольких играх и одна и та же страница в одном и том же сеансе работы может содержать разные данные. Там лучше данные для одной из игр, в которых пользователь участвует, хранить в сессии и сделать страницу для перехода между играми.

В общем, я не утверждаю, что сессиями пользоваться не нужно. Нужно, только всему своё место. К вопросу применимости трёх способов авторизации — через 401-й заголовок ("realm"), куки или сессии — я вернусь позже. Сейчас поговорю о сессиях.

Сессии в php — это на самом деле не метод авторизации (само понятие неправильное, но в форумах спрашивают именно "как авторизовывать пользователя через сессии?"). Встроенный в php механизм пользовательских сессий лишь идентифицирует этих пользователей, авторизовывать — опять же, работа вашего скрипта.

Много про механизм сессий рассказывать не буду — уже рассказано. В самом простом виде (вернее в самом dafault-ном) механизм этот работает так: система держит на сервере файл сессии, в котором содержатся её переменные. Пользователь при запуске сессии получает уникальный идентификатор (обычно через куку), и при обращении к другим страницам отправляет её. При запуске механизма сессий в вашем скрипте обработчик php проверяет, существует ли файл соответствующий пришедшему идентификатору сессии — если существует, то скрипт сможет прочесть данные из файла, если нет — будет запущена новая сессия и создан файл. Разумеется, имя данной переменной опеределено в установках php.

Теперь о том, какими функциями мы пользуемся.

session_start(). Запускает сам механизм сессий. От пользователя должна быть переменная и соответствующий ей файл. Если нет файла, он создаётся, и сессия запускается с нуля. Если нет ни файла, ни переменной, то генерируется переменная (например, посылается заголовок с кукой) и создаётся файл.

session_register(имя1, имя2, имя3...). Указание, какие переменные запомнить в файле по окончании работы скрипта. После того как пользователь перейдёт к другой странице, можно запустить механизм сессий, и после вызова данной функции переменные будут доступны.

session_destroy(). Удаляет файл данных сессии (при использовании кук надо удалять их вручную, выставив пустую куку: "setcookie(session_name())").

session_end(). Если после авторизации данные о пользователе менять не надо, лучше сразу "выключить за собой свет" — закрыть файл и освободить доступ к нему.

session_set_cookie_params(жизнь, путь, домен). Установка параметров куки с идентификатором сессии (по умолчанию кука выставляется на корень сервера и на 0 секунд — до закрытия браузера).

Пока всё. Подробно про сессии будут отдельные выпуски. Пока опишу механизм авторизации и идентификации пользователя при помощи сессий.

Итак, имеем три файла — вход (login), проверка (auth) и выход (logout).

// вырезка всех нежелательных символов
$login = preg_replace("/[^\w_\.\-]/", "", $HTTP_POST_VARS["login"]);
$pass = trim($HTTP_POST_VARS["pass"]);

// проверка переменных
if (strlen($login)==0 || strlen($pass)==0)
  $error = "Введите логин и пароль";
else {

  // проверка логина и пароля
  $user_result = mysql_query("SELECT * FROM user WHERE 
    login='$login' AND pass='". md5($pass). "'");
  /* если возникла ошибка в базе (например, пользователь всунул в сессию дли-и-инную 
  переменную, которую база переваривать не захотела) или получилась не одна строка, 
  отфутболиваем пользователя */
  if (mysql_error())
    die(mysql_error());

  elseif (@mysql_num_rows($user_result) != 1)
    $error = "Неверное имя пользователя или пароль.";

  // если всё нормально, выбираем данные, запускаем сессию
  else {
    $user = mysql_fetch_assoc($user_result);

    session_set_cookie_params(1800, "/");
    session_start();

    // запоминаем данные о пользователе
    session_register("user");

    // и дальше отправляем его куда-нибудь
    if (isset($HTTP_POST_VARS["return"]))
      header("Location: {$HTTP_POST_VARS['return']}");
    else
      header("Location: /");
    exit();
    };
  };

/* здесь пользователь уже не прошёл авторизацию, но может отправить куку из 
  закрытой сессии. очистим её. */
if (isset($HTTP_COOKIE_VARS[session_name()]))
  setcookie(session_name());

// дальше рисуем форму, это неинтересно.

Данный скрипт является и обработчиком и формой для ввода данных. При получении логина и пароля он обрабатывает их и, если они правильные, прекращает работу, отправив пользователя на нужную страницу. Если данные неправильные или вообще отсутствуют, рисует форму.

/* убиваем переменную user, чтобы нельзя было, нарисовав форму, отправить данные 
  в post-запросе. */
unset($user);

// флаг "ошибка сессии" — если он включён, работа прекратится.
$session_error = false;

// если не существует куки с идентификатором сессии, поднять флаг
if (!isset($HTTP_COOKIE_VARS[session_name()]))
  $session_error = true;

// если существует, запускаем механизм сессий и регистрируем переменную $user.
else {
  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".




For comment register here
   Unknown 2001-07-04 06:17
Все хорошо, но вот если пароль запоминается с md5(), то какже, братцы, сделать сервис "Забыли пароль?", который есть на "приличных" сайтах? Ну, который потом отсылает по мейлу.

   2001-07-04 06:52
Цитата:[22.05.01] Небольшая новость. Вот уже как 3 недели юзаю свежескаченную версию IE 6.xx.xxxx. Да, все-таки куки по умолчанию там отключены. А заставить пользователя что-либо сделат в настройках, чтобы попасть к вам на сайт, сами понимате невозможно. Да еще это будет назвываться "понижение уровня безопасности", чего от бедных пользователей добиться, все равно что пароль от Интернета добыть. Некоторые очень смелые пользователи и пароль от Инета сообщат, но
вот всех остальных и под пыткой не заставить установить пониженный уровень. Короче, очень скоро наконец-то накроются сайты использующие куки. Ибо кривая это технология...

   Unknown 2001-07-04 07:10
Генерить новый пароль.

   Unknown 2001-07-04 07:45
Откуда цитата? Кто такой бред пишет? Я не знаю, какая моча в голову БГ ударила, но куки - это нормальная технология. Что, всё передавать через адресную строку, что ли?!

   2001-07-04 15:59
> Кстати, именно так можно залазить под паролем и без ведома друга
> в web-интерфейсы, строящие авторизацию на сессиях.
Не совсем корректно.
Системы аутентификации, построенные на сессиях обычно вообще не используют логины/пароли в куке. Вместо этого в сессии регистрируется флажок, залогинился ли пользователь или нет. При этом, если хэшик идентификатора сессии будет светиться в параметрах GET, и есть возможность их перехватить во время, когда сессия (и аутентификация) активны, то можно залезть "под юзера" даже не зная его логина и пароля. Однако совсем не обязательно этому хэшику появляться в параметрах GET.
При работающих куках id сессии появится в QUERY_STRING один раз, а именно - на втором клике (если его туда принудительно не пихать). Только в этот момент его можно поймать в логах прокси, и и "сесть" на сессию без использования сниффера. При этом, можно запретить светить session id в QUERY_STRING вообще.
Подслушивание сниффером мы не рассматриваем, т.к. это лечится SSL-ем. Кроме того, можно предусмотреть принудительный логин даже зарегистрированного пользователя, если данные, которые он собирается посмотреть, очень важны.
Т.о. для увеличения безопасности системы построенной на сессиях есть несколько решений. Наиболее простое - обязать клиентов пользоваться куками (в целях их же безопасности). Т.к. куки включены примерно у 95% всех пользователей, то этот недостаток не является критичным. Поймать session id можно будет только сниффером.
Другое решение - ограничить сессию одним адресом. Действенно, но хуже. Куча людей может сидеть за одним прокси, и они смогут подглядывать в сессии друг к другу. С другой стороны, один пользователь может кидать запросы с совершенно разных адресов, не вставая с кресла - если его провайдер использует load balancing, или динамически переключается с магистрали на магистраль в зависимости от тарифных планов. Так что это не очень хороший выход.
Так что аутентификация, построенная на сессиях, совсем не обязательно ломается при помощи простого copy/paste.

   2001-07-06 10:11
Объясните мне глупому зачем использовать куки для таких вещей когда есть сессии ? Может я просто чего то не понимаю но мне всегда казалось что с появлением сессий в php куки нужны только для того чтобы "узнать" посетителя после того как он вновь вернётся на сайт через некоторое время.

   Unknown 2001-07-06 11:04
Куки - частный случай сессий.

   2001-07-09 11:04
2detail : этот "бред" если я не ошибаюсь пишет DlMA )
а вот насчёт того какой способ авторизации безопаснее - куки или сессии - я так и не понял).

   2001-07-09 11:06
p.s. detail ты говоришь что куки частный случай - так ведь сессии можно и вообще без кук использовать..

   Unknown 2001-07-09 11:57
Гы :) Не знал :)

   Unknown 2001-07-09 11:59
Можно.

   2001-08-10 05:30
Мне очень понравилась статья: коротко, ясно и понятно (не смотряна то, что я начал заниматься PHP совсем недавно).

With best regards, Kemp.

   2001-08-10 12:01
Вы уж простите меня, чайника, но не могли ли бы вы разбить исходник на файлы (какой кусок исходника в каком файле должен находиться). Заранее спасибо.

   Unknown 2001-08-10 12:54
Ок. Положу zip с тремя файлами.

   2001-08-10 21:21
>Да, все-таки куки по умолчанию там отключены.
Это вроде в рассылке softbest'a было.

   Unknown 2001-08-14 16:59
Как много нового я узнал на ваших страницах!
Жаль только, что с моей базой данных на PostgreSQL( или с моим Internet Explorer ) функция HEADER() не cовмещается.

   Unknown 2001-08-14 17:52
Вы ещё многого, видно, не знаете. Не работать из-за PostgreSQL функция header не может.

   Unknown 2001-08-16 17:44
А почему при логине просто не создать переменную сес. юзер в которой будет логин? и не делать проверку в базе данных на каждой странице, а только смотреть есть ли в переменной сессии "юзер" логин или нет? Чтбы нельзя было подставить переменную юзер через форму возьмем ее из массива HTTP_SESSION_VARS[].

   Unknown 2001-08-17 16:20
Гончар приколист такой:)
из-за постгреса хеадер не работает:--)))

   2001-08-21 12:43
Postgres тут действительно не при чём..если я правлинь понял до функции хеадер в браузер ничего не должно передаваться в том числе не олжны устанавливаться/сниматься никакие куки, то есть в твоём примере header(Location: /file.ext); работать не должно.... хотя может я и ошибаюсь...пойду проверю

   2001-08-22 13:59
Хотя нет..гоню я , всё работает.

   2001-08-26 21:23
Дмитрий,
а исходники в zip-файле с тремя файлами уже куда-то положили, или еще нет?

   Unknown 2001-08-26 22:16
Пока нет.

   2001-08-30 10:09
Привет Дмитрий ! У меня вопрос. Я испоьзовал схему с куками описанную тобой в предыдущей статье. Добавил ко всему этому скрипт logout.php, который обнуляет все куки. ( типа cookie_login, cookie_passwd). Но если после logout.php нажать кнопку Back, то я опять получаю доступ к предыдущей странице, хотя этого быть не должно. Помоги плиз, что делать

   Unknown 2001-08-30 11:02
Это лечится отправкой со всех закрытых страниц header("Expires: Thu, 01 Jan 1970 00:00:01 GMT");

   2001-10-22 06:38
Переписал данный пример под Postgress SQL. Кому нужно - можно брать 3 файла по адресу http://www.andromeda.ru/rtfm/php_auth_session/

   2001-11-02 02:00
Уж очень хочется поглядеть на код, разбитый по файлам, статья написана давно, обещать - обещали, а файлов так и нету? Или я где-то не там гляжу?

   2001-11-02 10:56
Никто так и не ответил на интересный вопрос Sev'ы :(((

   Unknown 2001-11-23 08:12
Всё хорошо. Но зачем опять - куки? Известно, что IE 5.X по каким то причинам отказывается принимать expiration_time для куки. По моему, если пользаватель не может или не хочет получать куку , тогда всё надо делать универсально - без куки.

   2001-12-07 21:07
Делаю так:
class Session {...
function set($varname, $value) {
if (!session_is_registered($varname))
if (!session_register($varname)) return false;
$HTTP_SESSION_VARS[$varname] = $value;
return true;
}

function get($varname) {
return $HTTP_SESSION_VARS[$varname];
}...
Я конечно понимаю что если глобал сессии разрешены, то можно писать и напрямую (типа: $varname = $value, и оно так работает)...
НО мне надо через $HTTP_SESSION_VARS и я не понимаю какого не работает так?

   2001-12-22 14:47
Пока все было в трех файлах, работало. Как только выделил функцию, делающую проверку авторизации и перенес ее в 4-й файл, то даже с правильным паролем-логином и (соответственно) запущенной сессией выполняется следующее:

// если не существует куки с идентификатором сессии, поднять флаг
if (!isset($HTTP_COOKIE_VARS[session_name()]))
$session_error = true;

Вопрос: печенька должна создаваться вместе с сессией(исходя из текста)? А почему не создается.

   Unknown 2002-02-06 08:28
Почему в данном примере получается такая ошибка:
Warning: Trying to destroy uninitialized session in /home/www/elec.ru/html/catalog/auth.inc on line 32

Warning: Cannot add header information - headers already sent by (output started at /home/www/elec.ru/html/catalog/auth.inc:32) in /home/www/elec.ru/html/catalog/auth.inc on line 36

Warning: Cannot add header information - headers already sent by (output started at /home/www/elec.ru/html/catalog/auth.inc:32) in /home/www/elec.ru/html/catalog/auth.inc on line 39

   2002-02-13 13:14
Кто - то хотел узнать зачем COOKIES, если есть SESSION ????
====================================================
Рассказываю свою проблему:

Я написал идентификацию на сайте , связанную через session(), и на моем компьютере работало отлично. Но как только я перенес сайт на сервер провайдера все вдруг перестало работать. Я начал искать причину..

Уже пришло письмо от провайдера, что с ихней стороны никаких ошибок быть не может, как я проверил, что конфигурации сервера вообще не поддреживают Session&amp;#39;s (просто неправильно настроен сервер.)

Написалю скрипт и продемонстрировал его хостингу, как они после этого ~правильно отконфигурировали~ SESSION.

Но мой сайт все-равно не работал. Если запускал проверку SESSION только на файле testsess.php - все отлично работало, но
как только переход был со скрипта на скрипт - SESSION - информация исчезала.

Думаю, что проблема в конфигурации моей сети: я подключен к локальной сети , где внутренний IP:12.23.24.1 , а внешний 234.23.12.2 (пример) , а локальный соответственно 127.0.0.1. Свой внешний IP я могу видеть через программу mIRC, сделав /whois на себя.

В конце-концов я махнул рукой и все сделал через COOKIES. Я думаю, что SESSION слишком ранняя технология , и пользуются ею не очень много. Механизм будет еще усовершенствоваться и дорабатываться.

   2002-02-28 09:46
Что такое коллекция Request.Cookies, чем она отличается от обычных куков

   Unknown 2002-03-07 10:06
Чета не могу разобраться, как часть в каком файле должна находится. Если не сложно, выложите, пожалуйста архив этих скриптов.

Заранее спасибо.

   Unknown 2002-05-01 16:51
Да пожалуйста выложите исходники в архивчик. И сообщите плиз где его потом можно скачать. ПЛИЗ...

   Unknown 2002-05-01 23:20
Хех а линк не пашет :(

   Unknown 2002-05-31 02:13
>> Что такое коллекция Request.Cookies, чем она отличается от обычных куков
Причем тут вообще ASP ? :-)
Это те же самые куки, но в ASP.

   2002-12-06 15:22
# phpMyAdmin MySQL-Dump
# version 2.3.1
# http://www.phpmyadmin.net/ (download page)
#
# Хост: localhost
# Время создания: Дек 04 2002 г., 17:50
# Версия сервера: 3.23.52
# Версия PHP: 4.2.3
# БД : `test`
# --------------------------------------------------------

#
# Структура таблицы `user_logged`
#

CREATE TABLE user_logged (
user_id varchar(128) NOT NULL default '',
login varchar(128) NOT NULL default '',
auth int(6) NOT NULL default '0',
timeout int(6) NOT NULL default '0',
last_query int(6) NOT NULL default '0',
ip varchar(128) NOT NULL default '',
PRIMARY KEY (user_id)
) TYPE=MyISAM;

#
# Дамп данных таблицы `user_logged`
#

INSERT INTO user_logged VALUES ('e65d67d227de6f52c52af1b18533fb1c', 'admin', 1, 3600, 1039010817, '127.0.0.5');
# --------------------------------------------------------

#
# Структура таблицы `user_users`
#

CREATE TABLE user_users (
login varchar(128) NOT NULL default '',
passwd varchar(128) NOT NULL default '',
auth int(6) NOT NULL default '0',
PRIMARY KEY (login,login)
) TYPE=MyISAM;

#
# Дамп данных таблицы `user_users`
#

INSERT INTO user_users VALUES ('admin', '43e9a4ab75570f5b', 1);
INSERT INTO user_users VALUES ('root', '67457e226a1a15bd', 2);

Как авторизовывать пользователя через куки (cookies).

 
 
 
    © 1997-2008 PHPClubTeam
[]