Forum Webscript.Ru
Программирование => PHP => Тема начата: Enemy от 16 Ноября 2001, 13:30:14
-
Что такое сесии в пхп? Для чего они?
И напр. зачем они в форуме?
-
в форуме они используются для хранении информации посетителя
-
в принципе насколько я понимаю в РНР это альтернатива кукам
-
http://php.spb.ru там хорошо про сессии расписано
-
ну как тогда узнать поддерживает мой пхп сессии (phpinfo - скажет или нет?), и если нет - тогда как их подключить? мож. скачать что надо?
-
http://www.php.net/manual/en/ref.session.php
-
phpinfo() тебе как раз о сессиях много может расказать.
-
Насколько я в курсе, хотя я могу ошибаться, но сессии появились только в версии 4, гдето даже видел "Наконецто в версии 4.ХХ.ХХ сделали поддержку сессий)
А сесси нужны для того что бы когда ты просишь поситителя заполнить форму с данными, а она неприлично большая, то тебе целесообразно было бы разбить эту форму на несколько частей, записал данные с одной формы, перешел к друго...
Если хошь дам пример кода с использованием Нескольких форм и MySql.
-
Да, именно только в 4-ой версии они появились. Но если в третьей нужны, т.е. функции их заменяющие.
К тому же сейчас куки запрещают.... а зря
-
Да, именно только в 4-ой версии они появились.
Пользователей 3-ей версии спасет PHPLib. (если не ошибаюсь)
-
nobody
Если хошь дам пример кода с использованием Нескольких форм и MySql.
Был бы не против...
-
У меня тож есть большая форма. Я ее разбил на 3 части.
1ч. Вход пользователя.
2ч. Выбор всяких радио бутонов и т.п.
3ч. По тому что выбрано в 2ч. формируется 3ч также с выбором всяких дропдаун листов.
Через action post, получается не очень хорошо, ну в 1 части еще ничё, ну а потом, полная ерудна.
Я видел эт делается как то через сессии, может объясните как.
-
я же писал, что на http://php.spb.ru все написано как делать. плюс еще на http://detail.phpclub.net
-
Bhor, насколько я пониамю это что то похожее вот на это :)
session_start("название твоей сессии");
// Делаешщь форму или типа того...
.....
Делаешь проверку на ошибки, если токовых небыло то переходишь к этой части:
$user_name = $name;
$user_phone = $phone;
session_register("user_name");
session_register("user_phone");
Header("Location: step2.php");
exit;
В step2.php
Запускаешь свою сессию.
session_start("название твоей сессии");
//А потом просто работаешь стмем что в сессию загнал...
echo $user_name;
-
Забыл подчеркнуть... У сессий есть очень большой плюс им пофигу на пользователя и то что он у себя в браузере все выключил. Но так же есть весомый аргумент борьба со старыми ссесиями. Я решил эту проблему довольно оригинально.
После авторизации я пишу в базу данных этому пользователю время и дату авторизации, после чего при переходе от страници к страници я проверяю существует ли пользователь в базе если нет ганю его в шею, если существует то проверяю не слишком ли много времени прошло с момента авторизации, если нет то перезаписываю время.
@$query = "select name, password from admin where name=\'$admin_name\' and password=\'$admin_password\'";
$result = mysql_query($query);
if(mysql_num_rows($result) == 0){
Header("Location: index.php");
exit;
}
Это без использования времени, но помоему доделать будет просто...
Если есть более простой вариант буду рад посмотреть....
-
nobody
Ты писал такой код:
$user_name = $name;
$user_phone = $phone;
session_register("user_name");
session_register("user_phone");
Header("Location: step2.php");
exit;
Сделаю несколько поправок.
1.ИМХО лучше все данные для сессии загонять в массив:
$sess=array();
$sess[\'user_name\']=$name;
$sess[\'user_phone\']=$phone;
2. Лучше в файле step2.php сначало сделать
unset($sess);
session_start();
А то если твой скрипт вызовут так
step2.php?user_name=name&user_phone=02
будут у тебя проблемы с безопасностью
После авторизации я пишу в базу данных этому пользователю время и дату авторизации, после чего при переходе от страници к страници я проверяю существует ли пользователь в базе если нет ганю его в шею, если существует то проверяю не слишком ли много времени прошло с момента авторизации, если нет то перезаписываю время.
По поводу авторизации.
Я делаю так. Проверяю логин/пароль если все правильно то в сессию запиисываю "признак авторизации":
$sess[\'auth\']=1;
В последующих страницах просто проверяю эту переменную. Если она равна 1 значит пользователь прошел авторизацию.
То есть в моем методе не нужно делать лишний запрос к БД.
Что касается старых сессий то насколько я знаю PHP их сам удляет. В переменной gc_maxlifetime - через сколько после последнего обращения нужно удалить эту сессию.
-
А то если твой скрипт вызовут так
step2.php?user_name=name&user_phone=02
будут у тебя проблемы с безопасностью
База вернет 0, а это будет означать что такого пользователя несуществует и погонит его в шею.
Что касается старых сессий то насколько я знаю PHP их сам удляет. В переменной gc_maxlifetime - через сколько после последнего обращения нужно удалить эту сессию.
Чистка старых сессий на самом деле делаеться обработчиком handle_gc(), но поскольку это процес слишком ресурсоемкий разработчики сделали session.gc_probabilityА я думаю мало у кого сдесь есть возможность устонавливать такие пораметры. А именно им устанавливаеться в процентах, какова вероятность того, что при следующем запуске сценария будет выбран обработчик "Чистка мусора"...
А если ресурс имеет невысокую посещаемость велика вероятность сохронения старых сессий.
-
unset($auth) лучше делать, например, если ты ввел переменную $auth=1 в урле, а потом ее проверяешь, то поломать защиту проще простого. (кстати, на том же php.spb.ru про это написано)
-
советую сделать небольшой файлик со следующим содержимым:
unset($var1);
session_start();
session_register("var1");
?>
и инклудить этот файлик в начало любого файлика, в котором вы жаждете использовать сессии и var1..
исчезает возможность передачи var1 через адресную строку (...?var1=vasya)...да и удобно так)
-
имхо, воспользоваться готовыми безопасными решениями и не переизобретать велосипед.
-
http://php.spb.ru/php/session.html
Art
Зачем тему поднимать, к-рая уже давно закрыта???
-
session_unset();
session_unregister("user");
session_destroy();
ни одна из этих функций ни к чему не приводит...
в чем тут дело?
---
зы
одну закрыли, другую подняли...
-
KBA-KBA
Наверное юзаешь ПХП под виндой?
-
имхо, воспользоваться готовыми безопасными решениями и не переизобретать велосипед.
Kakimi imenno?
-
ну да под виндой... а у нее что траблы с сесиями???
-
Да нет с сесиями все впорядке, просто она их не удаляет ;)
-
Kuulest
http://www.digiways.com/articles/php/sessauth/
-
Spasibo, eshe ne uspel razobratsya no vrode chto interesnoe..
-
как так не удаляет? совсем???
и значения изменить не может? и отситить значения?
-
Нет все работает нормально. Не удаляет автоматически. Т.е. после того как заканчивается время сессии.
-
По поводу авторизации.
Я делаю так. Проверяю логин/пароль если все правильно то в сессию запиисываю "признак авторизации":
$sess[\'auth\']=1;
В последующих страницах просто проверяю эту переменную. Если она равна 1 значит пользователь прошел авторизацию.
А я без каких-либо признаков в сессию userid заношу. (нужен он мне в некоторых скриптах потом).
И с самого начала, как Britva уже говорил, unset($userid) делаю.
А со временем - более простой вариант - тоже текущее время заносить в сессию, а не в базу. Проверять на таймлимит - если исчерпался, прибивать таки сессию, а нет - записывать новое время.
-
А почему, тогда не работает
session_unset();
session_unregister("user");?
-
Добрый день!
Очень нужны примери сесии и ЭСКУЭЛ.
Буду очень благодарен если вышлете мне примери.
Заранее благодарен.
691@нм. ру
-
Добрый день!
примери сесии
http://www.digiways.com/articles/php/sessauth/
-
Столько раз уже поднимали этот вопрос что просто стоит почитать немного и все будет понятно :)