Forum Webscript.Ru

Программирование => PHP => Тема начата: Enemy от 16 Ноября 2001, 13:30:14

Название: сессии
Отправлено: Enemy от 16 Ноября 2001, 13:30:14
Что такое сесии в пхп? Для чего они?

И напр. зачем они в форуме?
Название: сессии
Отправлено: AliMamed от 16 Ноября 2001, 13:48:09
в форуме они используются для хранении информации посетителя
Название: сессии
Отправлено: AliMamed от 16 Ноября 2001, 13:48:48
в принципе насколько я понимаю в РНР это альтернатива кукам
Название: сессии
Отправлено: Britva от 16 Ноября 2001, 14:03:30
http://php.spb.ru там хорошо про сессии расписано
Название: понял
Отправлено: Enemy от 16 Ноября 2001, 14:05:17
ну как тогда узнать поддерживает мой пхп сессии (phpinfo - скажет или нет?), и если нет - тогда как их подключить? мож. скачать что надо?
Название: сессии
Отправлено: AliMamed от 16 Ноября 2001, 14:12:16
http://www.php.net/manual/en/ref.session.php
Название: сессии
Отправлено: Stek от 16 Ноября 2001, 14:36:54
phpinfo() тебе как раз о сессиях много может расказать.
Название: сессии
Отправлено: nobody от 17 Ноября 2001, 02:28:20
Насколько я в курсе, хотя я могу ошибаться, но сессии появились только в версии 4, гдето даже видел "Наконецто в версии 4.ХХ.ХХ сделали поддержку сессий)

А сесси нужны для того что бы когда ты просишь поситителя заполнить форму с данными, а она неприлично большая, то тебе целесообразно было бы разбить эту форму на несколько частей, записал данные с одной формы, перешел к друго...

Если хошь дам пример кода с использованием Нескольких форм и MySql.
Название: сессии
Отправлено: Britva от 17 Ноября 2001, 02:36:52
Да, именно только в 4-ой версии они появились. Но если в третьей нужны, т.е. функции их заменяющие.

К тому же сейчас куки запрещают.... а зря
Название: сессии
Отправлено: Макс от 17 Ноября 2001, 21:24:10
Цитировать
Да, именно только в 4-ой версии они появились.
Пользователей 3-ей версии спасет PHPLib. (если не ошибаюсь)
Название: Sorry, Я ничайно зашел под Unregistered
Отправлено: Enemy от 19 Ноября 2001, 12:28:21
Цитировать
nobody
Если хошь дам пример кода с использованием Нескольких форм и MySql.

Был бы не против...
Название: сессии
Отправлено: bhor от 19 Ноября 2001, 13:56:28
У меня тож есть большая форма. Я ее разбил на 3 части.
1ч. Вход пользователя.
2ч. Выбор всяких радио бутонов и т.п.
3ч. По тому что выбрано в 2ч. формируется 3ч также с выбором всяких дропдаун листов.

Через action post, получается не очень хорошо, ну в 1 части еще ничё, ну а потом, полная ерудна.
Я видел эт делается как то через сессии, может объясните как.
Название: сессии
Отправлено: Britva от 19 Ноября 2001, 14:46:23
я же писал, что на http://php.spb.ru все написано как делать. плюс еще на http://detail.phpclub.net
Название: сессии
Отправлено: nobody от 21 Ноября 2001, 02:11:05
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;
Название: сессии
Отправлено: nobody от 21 Ноября 2001, 02:23:55
Забыл подчеркнуть... У сессий есть очень большой плюс им пофигу на пользователя и то что он у себя в браузере все выключил. Но так же есть весомый аргумент борьба со старыми ссесиями. Я решил эту проблему довольно оригинально.
После авторизации я пишу в базу данных этому пользователю время и дату авторизации, после чего при переходе от страници к страници я проверяю существует ли пользователь в базе если нет ганю его в шею, если существует то проверяю не слишком ли много времени прошло с момента авторизации, если нет то перезаписываю время.

@$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;
}
Это без использования времени, но помоему доделать будет просто...
Если есть более простой вариант буду рад посмотреть....
Название: сессии
Отправлено: Макс от 21 Ноября 2001, 19:45:37
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 - через сколько после последнего обращения нужно удалить эту сессию.
Название: сессии
Отправлено: nobody от 22 Ноября 2001, 02:47:49
Цитировать
А то если твой скрипт вызовут так
step2.php?user_name=name&user_phone=02
будут у тебя проблемы с безопасностью

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


Цитировать
Что касается старых сессий то насколько я знаю PHP их сам удляет. В переменной gc_maxlifetime - через сколько после последнего обращения нужно удалить эту сессию.

Чистка старых сессий на самом деле делаеться обработчиком handle_gc(), но поскольку это процес слишком ресурсоемкий разработчики сделали session.gc_probabilityА я думаю мало у кого сдесь есть возможность устонавливать такие пораметры. А именно им устанавливаеться в процентах, какова вероятность того, что при следующем запуске сценария будет выбран обработчик "Чистка мусора"...
А если ресурс имеет невысокую посещаемость велика вероятность сохронения старых сессий.
Название: сессии
Отправлено: Britva от 22 Ноября 2001, 03:41:47
unset($auth) лучше делать, например, если ты ввел переменную $auth=1 в урле, а потом ее проверяешь, то поломать защиту проще простого. (кстати, на том же php.spb.ru про это написано)
Название: безопасность
Отправлено: Art от 07 Марта 2002, 14:06:23
советую сделать небольшой файлик со следующим содержимым:

unset($var1);
session_start();
session_register("var1");
?>

и инклудить этот файлик в начало любого файлика, в котором вы жаждете использовать сессии и var1..
исчезает возможность передачи var1 через адресную строку (...?var1=vasya)...да и удобно так)
Название: сессии
Отправлено: Dm от 07 Марта 2002, 17:22:59
имхо, воспользоваться готовыми безопасными решениями и не переизобретать велосипед.
Название: эх, млин
Отправлено: Britva от 07 Марта 2002, 21:54:39
http://php.spb.ru/php/session.html
Art
Зачем тему поднимать, к-рая уже давно закрыта???
Название: сесии не удаляются...
Отправлено: KBA-KBA от 21 Апреля 2002, 02:31:29
session_unset();
session_unregister("user");
session_destroy();

ни одна из этих функций ни к чему не приводит...
в чем тут дело?
---
зы
одну закрыли, другую подняли...
Название: сессии
Отправлено: bhor от 22 Апреля 2002, 10:11:52
KBA-KBA
Наверное юзаешь ПХП под виндой?
Название: to Dm
Отправлено: Kuulest от 22 Апреля 2002, 14:38:56
Цитировать
имхо, воспользоваться готовыми безопасными решениями и не переизобретать велосипед.


Kakimi imenno?
Название: сессии
Отправлено: KBA-KBA от 22 Апреля 2002, 16:16:28
ну да под виндой... а у нее что траблы с сесиями???
Название: сессии
Отправлено: bhor от 22 Апреля 2002, 18:13:16
Да нет с сесиями все впорядке, просто она их не удаляет ;)
Название: сессии
Отправлено: Dm от 22 Апреля 2002, 20:47:30
Kuulest
http://www.digiways.com/articles/php/sessauth/
Название: to Dm
Отправлено: Kuulest от 22 Апреля 2002, 20:54:49
Spasibo, eshe ne uspel razobratsya no vrode chto interesnoe..
Название: сессии
Отправлено: KBA-KBA от 23 Апреля 2002, 00:24:10
как так не удаляет? совсем???
и значения изменить не может? и отситить значения?
Название: сессии
Отправлено: bhor от 23 Апреля 2002, 10:25:08
Нет все работает нормально. Не удаляет автоматически. Т.е. после того как заканчивается время сессии.
Название: сессии
Отправлено: Fury от 24 Апреля 2002, 15:50:18
Цитировать
По поводу авторизации.
Я делаю так. Проверяю логин/пароль если все правильно то в сессию запиисываю "признак авторизации":
$sess[\'auth\']=1;
В последующих страницах просто проверяю эту переменную. Если она равна 1 значит пользователь прошел авторизацию.

А я без каких-либо признаков в сессию userid заношу. (нужен он мне в некоторых скриптах потом).
И с самого начала, как Britva уже говорил, unset($userid) делаю.
А со временем - более простой вариант - тоже текущее время заносить в сессию, а не в базу. Проверять на таймлимит - если исчерпался, прибивать таки сессию, а нет - записывать новое время.
Название: сессии
Отправлено: KBA-KBA от 24 Апреля 2002, 17:48:28
А почему, тогда не работает
session_unset();
session_unregister("user");?
Название: сессии
Отправлено: gfdsa от 11 Июля 2002, 22:14:00
Добрый день!
Очень нужны примери сесии и ЭСКУЭЛ.
Буду очень благодарен если вышлете мне примери.
Заранее благодарен.
691@нм. ру
Название: сессии
Отправлено: Michel_Mak от 19 Июля 2002, 10:33:10
Добрый день!
Цитировать
примери сесии

http://www.digiways.com/articles/php/sessauth/
Название: сессии
Отправлено: n0b0dy от 19 Июля 2002, 17:08:22
Столько раз уже поднимали этот  вопрос что просто стоит  почитать немного и все будет понятно :)