Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Сессии (session_start())
Форумы портала PHP.SU » » Вопросы новичков » Сессии (session_start())

Страниц (1): [1]
 

1. gephaest - 17 Сентября, 2011 - 09:52:42 - перейти к сообщению
Я не очень понимаю одну вещь, связанную с сессиями. Вот пользователь залогинился, создалась сессия, в переменных $_SESSION['login'] и $_SESSION['password'] сохранены логин/пасс.
Я разбираю один скрипт авторизации, тут на каждой странице автор соеденяется с базой и проверяет логин/пароль. А нафига собственно? Разве нельзя просто проверять эти 2 переменные на наличие/отсутствие данных?
2. OrmaJever - 17 Сентября, 2011 - 11:06:21 - перейти к сообщению
как я понял скрипт проверяет по базе логин и пароль а потом записывает их в сесии?
Ну вот например мы заходим на index.php, скрипт проверяет даные в бд и записывает их в сесии, дальше мы переходим по сайту и всё нормально, а если мы откроем брауез и запустим например news.php? Если там нету авторизации то сесия будет пустая и мы будем как гость пока не откроем index.php (в котором такая проверка есть, и этот файй заполнит сесии), а также мы можем зайти на любой другой файл и чтобы всегда мы были авторизированы.
3. gephaest - 17 Сентября, 2011 - 12:18:03 - перейти к сообщению
в index.php форма, которая отправляет данные на обработчик (form action=), где если все хорошо идет запись в сессии
PHP:
скопировать код в буфер обмена
  1.  
  2. $_SESSION['password']=$myrow['password'];
  3. $_SESSION['login']=$myrow['login'];
  4. $_SESSION['id']=$myrow['id'];

Потом на всех других страницах сверху код
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. session_start(); //запускаем сессию. Обязательно в начале страницы
  3. include ("bd.php"); // соединяемся с базой, укажите свой путь, если у вас уже есть соединение
  4.  
  5. if (!empty($_SESSION['login']) and !empty($_SESSION['password']))
  6. {
  7. //если существует логин и пароль в сессиях, то проверяем, действительны ли они
  8. $login = $_SESSION['login'];
  9. $password = $_SESSION['password'];
  10. $result2 = mysql_query("SELECT id FROM users WHERE login='$login' AND password='$password' AND activation='1'",$db);
  11. $myrow2 = mysql_fetch_array($result2);
  12. if (empty($myrow2['id']))
  13.    {
  14.    //если логин или пароль не действителен
  15.     exit("Вход на эту страницу разрешен только зарегистрированным пользователям!");
  16.    }
  17. }
  18. else {
  19. //Проверяем, зарегистрирован ли вошедший
  20. exit("Вход на эту страницу разрешен только зарегистрированным пользователям!"); }

Как я понял механизм сессий носит с собой данные в $_SESSION постоянно, какой смысл на всех страницах проверять правильность данных $_SESSION?
4. caballero - 17 Сентября, 2011 - 16:17:04 - перейти к сообщению
Цитата:
Как я понял механизм сессий носит с собой данные в $_SESSION постоянно, какой смысл на всех страницах проверять правильность данных $_SESSION?


Никакого
Нужно просто проверячть их наличие и если нет перебрасывть на страницу логина или типа того


Зачем разбирать говнокод в качестве примера?
5. gephaest - 17 Сентября, 2011 - 17:47:19 - перейти к сообщению
Не найти простых нормальный примеров, а реальные движки (будь то cms или форумы) слишком сложны
6. OrmaJever - 17 Сентября, 2011 - 17:48:36 - перейти к сообщению
gephaest пишет:
Как я понял механизм сессий носит с собой данные в $_SESSION постоянно, какой смысл на всех страницах проверять правильность данных $_SESSION?

нет не всегда, после закрытия браузера или через 24 минуты не активности сесионая кука удаляется, а затем мы открываем браузер (вкладка ведь сохранилась) или обновляем станицу через 24+ минут и видим что мы уже не авторизированы (хотя наша кука с паролем никуда не делась).
7. caballero - 17 Сентября, 2011 - 18:16:35 - перейти к сообщению
какая кука с паролем? Речь идет о хранении пароля в сессии
никакой нормальный человек хранить пароли в куках не будет
8. gephaest - 17 Сентября, 2011 - 18:24:00 - перейти к сообщению
Кстати в том примере, который я разбирал именно логин+пароль хранился в куках :3
9. caballero - 17 Сентября, 2011 - 18:29:46 - перейти к сообщению
Глупо.

В куках иногда хранят логин или ID юзера с базы

чтобы когда юзер выбрал чекер "запомнить меня" при логине потом можно было его автоматом авторизовать

хранить для этого пароль чтобы его вычитали трояны совсем не обязательно
10. OrmaJever - 17 Сентября, 2011 - 20:43:03 - перейти к сообщению
caballero пишет:
какая кука с паролем?

это я к примеру сказал, там может быть какойнибудь случайный хеш из базы
caballero пишет:
В куках иногда хранят логин или ID юзера с базы

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

 

Powered by ExBB FM 1.0 RC1