Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Авторизация с помощью сессий
 
 автор: kyzma   (11.11.2007 в 01:29)   письмо автору
 
 

делаю авторизацию. Если логин и пароль введены правильно, то генерируется случайное число


mt_srand((double)microtime()*1000000);
$uid=mt_rand(1,1000000);

которое хочу использовать в качестве идентификатора сессии.
Как передать и проверить этот идентификатор при переходе на другие страницы?Спасибо.

   
 
 автор: cheops   (11.11.2007 в 13:24)   письмо автору
 
   для: kyzma   (11.11.2007 в 01:29)
 

А почему не устраивает классический идентификатор сессии?
<?php
  session_id
($uid);
  
session_start();
?>

   
 
 автор: kyzma   (11.11.2007 в 18:03)   письмо автору
 
   для: cheops   (11.11.2007 в 13:24)
 

То есть этот код нужно вставить на странице авторизации?
А как потом проверять этот идентификатор на страницах защищенной области?

   
 
 автор: kyzma   (11.11.2007 в 19:36)   письмо автору
 
   для: kyzma   (11.11.2007 в 18:03)
 

Если пользователь успешно авторизовался, то я переменной присваиваю идентификатор сессии:


$_SESSION['id'] = session_id();


а затем, на каждой странице защищенной области выполняю проверку:


if ($_SESSION['id'] == session_id())
    {
        //выполняются определённые действия
        
    }


Допустим ли такой способ и не появляются ли уязвимости? Если, кто нибудь может посоветовать, пожалуйста!!!

   
 
 автор: kyzma   (11.11.2007 в 21:42)   письмо автору
 
   для: kyzma   (11.11.2007 в 19:36)
 

ПОЖАЛУЙСТА!!!
Что нибудь скажите.

   
 
 автор: ddhvvn   (11.11.2007 в 21:54)   письмо автору
 
   для: kyzma   (11.11.2007 в 21:42)
 

Не допустим, это чушь! Зачем храните id сессии в самой сессии? А как Вы его получите на другой странице?
Почитайте это. Только тут подразумевается, что ид сессии передается автоматически, через куки! Но можно, еще сделать, чтобы он передавался через GET-параметр (что не рекомендуется).

   
 
 автор: kyzma   (11.11.2007 в 22:36)   письмо автору
 
   для: ddhvvn   (11.11.2007 в 21:54)
 

Ну подскажи тогда, уважаемый ddhvvn, как на других страницах проверять, авторизовался пользователь или нет. Премного благодарен!!!

   
 
 автор: ddhvvn   (11.11.2007 в 22:50)   письмо автору
 
   для: kyzma   (11.11.2007 в 22:36)
 

Например, при входе пользователя при правильном указании данных, регистрируете в сессии переменную auth и ставите ей какой-нибудь флаг (наприм, 1).
Проверка:

<?php
...
  if (
$_SESSION["auth"] == 1)
  {
//пользователь авторизован
  
}
  else
  {
//пользователь не авторизован
  
}
...
?>

   
 
 автор: kyzma   (11.11.2007 в 23:21)   письмо автору
 
   для: ddhvvn   (11.11.2007 в 22:50)
 

Цитирую одного очень не глупого человека:

После авторизации все скрипты защищенной части вызываются с неким флажком вида adminmode=1. (Не надо смеяться - я сам такое видел).

   
 
 автор: Unkind   (11.11.2007 в 23:57)   письмо автору
 
   для: kyzma   (11.11.2007 в 23:21)
 

> Цитирую одного очень не глупого человека
Этот человек писал похоже ситуацию с кодом для register_globals = on.

Речь похоже об этой статье: http://brb.silverage.ru/design/?act=doc&cat=php&ID=3

Делать идентификатором сессии число от 1 до 1000000 крайне рискованно. Миллион запросов? Вполне реально в наше время. Он пытается это конпенсировать проверкой IP-адреса, что мешает, должно быть, части пользователям с динамическим IP.

Вообще, скажу Вам по секрету, то что сказал cheops (а именно создание сессии) и делает за Вас передачу пользователю уникального идентификатора (session id или, проще говоря, SID) и проверки её с уже существующими.
А вот что касается совета ddhvvn'а, то он будет прекрасно работать. Никто не сможет добавить ключ "auth" в $_SESSION просто так.

   
 
 автор: kyzma   (12.11.2007 в 18:17)   письмо автору
 
   для: Unkind   (11.11.2007 в 23:57)
 

Большое спасибо

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования