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 :: Версия для печати :: SESSIONs and COOKIEs
Форумы портала PHP.SU » PHP » Программирование на PHP » SESSIONs and COOKIEs

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

1. T-Mon - 31 Января, 2008 - 08:59:50 - перейти к сообщению
У меня есть ряд вопросов по поводу использования сессий и крекеров.
1. Безопасно ли записывать в сессию только ID пользователя или стоит создавать 2 переменных, вторая из которых бы хранила md5 пароля? То есть не сможет ли никто подделать сессию, вписав просто ID или UserName жертвы. Элмент массива $_SESSION может иметь любой ключ, то есть переменная с любым ключем будет безопасна и корректно передаваться?
2. Как и реагируя на какие события стоит продливать действие крекера? Я так подозреваю, что продление осуществляется той же, что и создание/уничтожение... кстати, создавать крекер не можно просто присвоив значение $_COOKIE (есть ли возможность передавать время действия и URL действительности куки при таком методе)?
3. Насколько я понял функция setcookie() отправляет заголовки, что не даст возможность потом использовать функцию header(), как избежать подобного (опять же вопрос о присвоении элементу массива)?
4. Хотелось бы услышать комментарии по поводу своего алгоритма.

Авторизация:
Считываем имя/пароль и сверяем их с базой данных и если существует такой пользователь записываем его ид в сессию с ключем 'id' (если установлена галочка автоматический вход
создаем куки с имене id (его номер) и pass (md5 пароля)) и редирект на главную страницу, иначе вывод про ошибку в самой форме авторизации.

Повседненвая проверка (на каждой странице)+автоматическая авторизация:
Если существует сессия с его ID тогда просто отображаем страницу, иначе проверяем существует ли кукис, если существует - свереям (правильный ID и Pass - продливаем куки и создаем сессию с ID, иначе удаляем куки).

Выход:
Просто удаляем все сессии и все крекеры.

Собственно и все.
2. Dastar - 31 Января, 2008 - 11:22:17 - перейти к сообщению
Не понимаю зачем тебе хранить в сессии пароль? Хватает и id.
Просто создаешь новую таблицу, в которую заносишь все session_id() авторизованных пользователей. А потом просто проверяешь, существует ли такой id в базе или нет. Если существует - пожалуста, гуляйте. Иначе предлагаешь пользователю авторизоваться или зарегестрироваться.
3. Волк - 31 Января, 2008 - 12:31:09 - перейти к сообщению
У меня такой алгоритм
1. Если в сессии есть логин то выводим область "для зарегистрированных"
2. Если нет то выводим страницу со входом
3. Получаем от формы входа логин (и пароль)
4. Если он удачно сравнился с паролем (и если такой логин есть в базе данных) регистрируем этот логин в сессии (в вашем случае регистрация id из базы данных) пароль можно не регистрировать т.к. не зная пароля некто не может зарегистриовать логин в сессии

Пароли в куках хранить (даже в мд5) не рекомендуется. А если отмечено входить автоматически, то надо сделать (через куки) так чтобы после завершения сеанса сессия не обрывалась.
4. valenok - 31 Января, 2008 - 17:44:11 - перейти к сообщению
Цитата:
1. Безопасно ли записывать в сессию только ID пользователя или стоит создавать 2 переменных, вторая из которых бы хранила md5 пароля? То есть не сможет ли никто подделать сессию, вписав просто ID или UserName жертвы. Элмент массива $_SESSION может иметь любой ключ, то есть переменная с любым ключем будет безопасна и корректно передаваться?


Может если понимать пнринцип действия - станет проще. http://phpclub[dot]ru/detail/article/sessions

Цитата:
2. Как и реагируя на какие события стоит продливать действие крекера? Я так подозреваю, что продление осуществляется той же, что и создание/уничтожение... кстати, создавать крекер не можно просто присвоив значение $_COOKIE (есть ли возможность передавать время действия и URL действительности куки при таком методе)?


Продлевать уничтожать только когда вам нужно.
setcookie фактически единтсвенная и всемогущая функция для работы с куками.
Вы сами написали:
создавать крекер не можно просто присвоив значение
О каком времени может тут вообще идти речь?

Цитата:
3. Насколько я понял функция setcookie() отправляет заголовки, что не даст возможность потом использовать функцию header(), как избежать подобного (опять же вопрос о присвоении элементу массива)?


А вы пробовали выполнить setcookie и header подряд ? Тогда попробуйте.
Причём тут массив и заголовки??


Дальше я ваше сообщение не читал потому что прочитал сообщение Волка
на мой взгляд описывающее универсальный принцип работы авторизации.
5. Волк - 31 Января, 2008 - 18:58:35 - перейти к сообщению
valenok пишет:
прочитал сообщение Волка
на мой взгляд описывающее универсальный принцип работы авторизации.

До этого алгоритма я сам дошел, долгим и тернистым путем проб и ошибок Улыбка
6. valenok - 31 Января, 2008 - 19:07:34 - перейти к сообщению
А мне повезло больше. Я статью читал внимательно =)
7. Dastar - 31 Января, 2008 - 19:38:42 - перейти к сообщению
valenok пишет:
ов по поводу использования

Везееет(с)КВН Радость
А я тоже доходил сам, так как из-за спецефических настроек файла php.ini топ сервера и моего хостинга долго не мог вообще с сессиями разобраться)
8. Волк - 31 Января, 2008 - 20:35:54 - перейти к сообщению
Учится можно общаясь с умными людьми, читая книги и на своем опыте. При этом свой опыт усваивался лучше всего (особенно негативный опыт).

 

Powered by ExBB FM 1.0 RC1