Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Общие вопросы > SESSION |
Автор: APro 24.7.2008, 23:49 | ||
В очередной раз зравствуйте! Моё изучение PHP продвигается семимильными шагами. Когда мне буду вручать Олимпийскую мидаль по программированию, я обязательно поблагодарю Vingrad, всех админов, ну и тех кто мне помогал... Ладно, об этом позже ![]() Объясните пожалуйста мне, как вобще работать с сессиями. Как начинать, как заканчивать и всё, что может понадобится при написании какого-либо скрипта. Если лень писать, то можно хотябы ссылки на статиь (желательно на русском). Пошу не посылать меня в поиск, так как я там был... Но ничего тольком не понял. К сожалению... --
![]() ![]() |
Автор: Mal Hack 25.7.2008, 00:10 |
http://phpclub.ru/detail/article/sessions |
Автор: APro 25.7.2008, 13:02 | ||
![]() Я посмотрел:
и окончательно запутался. Получается что если значения login и password верны, то в сессию записывается время, а если не верны, то форма ввода этих переменных. Вобще, как сделать авторизацию с сессиями? (чтобы при заходе в index.php да и в любой другой скрипт было видно, что зашёл авторизированный пользователь) |
Автор: Mal Hack 25.7.2008, 13:10 |
Предположим, есть исполняемая программа. EXE файл. Принцип, как она будет работать с конфигурационным файлом, INI например, представляете? Теперь кидаем эту программу в инет. Делаем INI файл для каждого пользователя (хранилище сессии). Теперь надо пользователй различать. В Куку пишем SID - идентификатор сессии, т.е. привязываем его к конкретному INI файлу. Если пользователь будет передавать SID, мы ьудем загружать данные из INI. Не будет передавать - не будем. INI в данном случае - абстракция. Сессия - просто реализация. Алгоритм авторизации можно глянуть тут: http://base.vingrad.ru/view/2711-Praktikum-Pishem-sistemu-Registratsii-Avtorizatsii |
Автор: APro 25.7.2008, 13:39 |
Круто, только объясни мне, файл который ты приложил в конце, это уже можно использовать как модуль Регистрация/Авторизация? Добавлено через 3 минуты и 19 секунд Хм, и ещё, а как использовать этот файл? Ну, в том смысле что его можно просто include? Или как? |
Автор: Mal Hack 25.7.2008, 13:44 |
Этот вопрос тут задают пару раз в месяц. Отвечаю. Если хотите чему-то научиться, смотрите на костяк, принцип работы. Если нет - копируйте, используйте, только потом не говорите, что у вас где-то там в скрипте косяк, где-то еще и т.п.... Файл рабочий на версии PHP<5 А как по вашему еще можно подключить файл? Нет, ну я могу, как один из альтернативных вариантов предложить eval(file_get_contents), но боюсь в этой ситуации он не сработает. Скорее всего не сработает... include, конечно же. |
Автор: Feldmarschall 25.7.2008, 13:48 | ||
Нет, не стоит. Во-первых, там нет регистрации. Во-вторых, там половина функций устарела (как и по первой ссылке, кстати). В-третьих, использовать вообще ничего не надо. Если хочешь, чтобы работало, надо делать только самому. По поводу твоего кода. Логика можно сделать попроще. Разделить авторизацию на два этапа. Первый - проверка. Делается ЭЛЕМЕНТАРНО:
Второй сводится к проверке логина и пароля, и - если успешно - записи логина в сессию. Тоже не бином ньютона. Если вызывает трудности, то надо сначала потренироваться на создании гостевой книги |
Автор: Mal Hack 25.7.2008, 13:52 |
Обратите внимание на п.4, каркасом чего он является? |
Автор: Feldmarschall 25.7.2008, 13:53 |
извините, ошибся =) |
Автор: APro 25.7.2008, 13:58 | ||
Ну вобще то, пока я писал своё сообщение что не понимаю, я на самом деле начал понимать... Вернее мне пришла в голову мысль. Короче, юзер ввёл логин и пароль - проверили. Если нашли в БД такой логин и пароль, то записываем в в БД хеш(логин+пароль+ip+секретное значение) и дальше через сессию передаем. (секретное значение - пусть будет там циферка или слово какое-нибудь) Проверяем авторизован пользователь или нет: Тот переданный хеш ищем в таблице, если найден, то пользователь есть. Выводим надпись "Привет, " + логин пользователя. Ну и раскручиваем тему дальше... Вобщем так можно сделать? (конечно можно, а из соображений по безопасности? Нельзя будет подделать сессию?) Добавлено через 5 минут и 38 секунд Почему-то при запуске qwe.php выскакивает ошибка: Fatal error: Cannot redeclare hash() in C:\xampp\htdocs\nick\qwe.php on line 22 И ещё, в MySQL запросе:
Ошибка. Там же не должно быть запятой после `hash` TINYTEXT NOT NULL , в таблице `auth_sessions` |
Автор: Feldmarschall 25.7.2008, 15:13 |
APro, не нужно ничего в бд писать. у тебя сессия есть для этого. секретничать тоже не нужно. можешь написать логин, или id - в общем, что нужно для идентификации пользователя. И ВСЕ. сессии - это очень просто. не надо пытаться делать их сложнее ,чем они есть Добавлено через 9 минут и 20 секунд Казалось бы, авторы пхп сделали работу с сессиями простой до предела - одна-единственная переменная, $_SESSION. Присвоил значение его элементу - положил в сессию. Прочитал элемент - достал из сессии. Не забыть еще session_start(). ВСЁ! Две строчки! И все равно люди умудряются в этих двух соснах заблудиться. |
Автор: APro 27.7.2008, 17:53 | ||
а если например в сессии хранить просто ID, то получается, что его можно подделать. Если например злоумышленник узнает ид админа, то у него будут права, так ведь? (или просто сессию нельзя подделать?) Я читал, что сессию можно подделать и тогда хана... (или это только когда куки используешь?) А сессия делается так, как я понимаю:
А на остальных скриптах проверять сессию sname с ID'ом, и если такой есть в БД, то тогда убирать форму ввхода и писать Welcome сообщение? |
Автор: Mal Hack 27.7.2008, 18:11 |
ID сессии пишется в куку и передается пользователю. При каждом обращении к скрипту кука передается. Вот ее подделать можно. Для этого вы и должны делать проверку, на то что пользователь именно тот, кто вам нужен. Самый простой вариант сравнивать USER_AGENT, IP пользователя, его имя с где-ть сохраненным. Естественно зашифрован. |
Автор: Feldmarschall 27.7.2008, 19:20 |
А я читал, что инопланетяне похитили президента, а Киркорова родила двойню. Надо не только читать, но и думать. |