Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Механизм сессий

Сообщения:  [1-10]    [11-20]  [21-22] 

 
 автор: Trianon   (11.12.2007 в 23:14)   письмо автору
 
   для: Alex14   (11.12.2007 в 22:55)
 

Ерунда. Cooikies от разных серверов лежат в разных доменных пространствах клиента.

   
 
 автор: sim5   (11.12.2007 в 23:04)   письмо автору
 
   для: Alex14   (11.12.2007 в 22:21)
 

Вот немного из литературы:

Имя группы сессии
На одном и том же сайте могут существовать сразу несколько сценариев, которые нуждаются в услугах поддержки сессий PHP. Они "ничего не знают" друг о друге, поэтому временные хранилища для сессий должны выбираться не только на основе идентификатора пользователя, но и на основе того, какой из сценариев запросил обслуживание сессии. Для наглядности рассмотрим пример:

Пусть разработчик А написал сценарий счетчика. Он использует переменную $count, и не имеет никаких проблем, до тех пор, пока разработчик В, ничего не знающий о сценарии А, не создал систему статистики, которая тоже использует сессии. Самое ужасное, что он также регистрирует переменную $count, не зная о том, что она уже занята. В результате, как всегда, страдает пользователь: запустив сначало сценарий разработчика В, а потом - А, он видит, что данные счетчиков перемешались.

Нужно как-то разграничить сессии, принадлежащие одному сценарию, от сессии, принадлежащих другому. К счастью, разработчики PHP предусмотрели такое положение вещей. Можно давать группам сессии непересекающиеся имена, и сценарий, знающий имя своей группы сессии, сможет получить к ней доступ. Вот теперь-то разработчики А и В могут оградить свои сценарии от проблем с пересечением имен переменных. Достаточно в первой программе указать PHP, что будет использоваться группа с именем, например, sesA, а во второй - sesB.

Идентификатор сессии
Идентификатор сессии является именем временного хранилища, которое будет использовано для хранения данных сессии между запусками сценария. Один SID - одно хранилище. Нет SID, нет и хранилища, и наоботот. Как же соотностится идентификатор и имя группы? Имя - это всего лишь собирательное название для нескольких сессий (то есть, для многих SID), запущенных разными пользователями. Один и тот же клиент никогда не будет иметь два различных SID в пределах одного имени группы. Но его браузер вполне может работать с несколькими SID, расположенными логически в разных "пространствах имен".

Итак, все SID уникальны и однозначно определяют сессию на компьютере, выполняющем сценарий - независимо от имени сессии. Имя же задает пространство имен, в которое будут сгруппированны сессии, запущенные разными пользователями. Один клиент может иметь сразу несколько активных пространств имен (то есть несколько имен групп сессий).

   
 
 автор: Alex14   (11.12.2007 в 22:55)   письмо автору
 
   для: Trianon   (11.12.2007 в 22:42)
 

Ничего не мешает. Просто session_name("main"), насколько понимаю, заменяет стандартное имя сессии phpsessid на "main". Так советуют делать, потому что при одновременном обращении браузера к разным серверам могут оказаться одинаковыми имена сессионных переменных, и тогда их значения перепутаются (по видимому, речь идёт о куках у клиента).

   
 
 автор: Trianon   (11.12.2007 в 22:42)   письмо автору
 
   для: Alex14   (11.12.2007 в 22:21)
 

Что Вам мешает просто не трогать session_name() ?
а насчет как работает: http://phpfaq.ru/sessions

   
 
 автор: Alex14   (11.12.2007 в 22:21)   письмо автору
 
   для: Trianon   (09.12.2007 в 23:48)
 

После

session_name("main");
session_start();
...
$_SESSION["var"] = $var;
...

в каталоге "c:/php/tmp/" создадутся два файла: "sess_main", в который пишутся сессионные переменные, и пустой файл "sess_sid", где sid = session_id("main"). Команда session_id() выдаст "main". Если этот же скрипт запустить с заново запущенного браузера, то в каталоге "c:/php/tmp/" добавится ещё один пустой файл "sess_sid" с другим sid. А в файле "sess_main" старые сессионные переменные перепишутся новыми. Тем не менее всё почему-то работает, т.е. php помнит и те переменные, которые были записаны в сессию скриптом, запущенным при обращении первого браузера. Может кроме временных файлов они ещё в оперативной памяти хранятся? И ссылки в адресной строке не дополняются (у меня session.use_trans_sid = 0 в php.ini), хотя куки отключил, сервер всё равно браузеры различает.

Всё это непонятно для меня, чёрный ящик какой-то. Сдаётся мне, что проще самому сессии с дополнением url организовать, чем разобраться как это в php работает.

   
 
 автор: sim5   (10.12.2007 в 06:42)   письмо автору
 
   для: Alex14   (09.12.2007 в 23:29)
 


session_name('main');
session_start();
echo session_name();

Создается сессия с уникальным идентификатором, сессия одна, без "сородичей". Если сценарий будет запущен другим пользователем, для этого пользователя будет создана своя сессия. Какие еще несколько пустых?

   
 
 автор: bronenos   (10.12.2007 в 01:04)   письмо автору
 
   для: Alex14   (09.12.2007 в 23:55)
 

Имя сессии указывает серверу, какое значение принять в качестве идентификатора

Зачем вам механизм?

   
 
 автор: Trianon   (10.12.2007 в 00:08)   письмо автору
 
   для: Alex14   (09.12.2007 в 23:55)
 

Нету никаких именованных сессий. Есть сессионный массив и его содержимое.

   
 
 автор: Alex14   (09.12.2007 в 23:55)   письмо автору
 
   для: mihdan   (09.12.2007 в 23:46)
 

mihdan
Вопрос сформулирован в первом собщении темы и ответе sim5. Меня интересуют подробности создания сессионных файлов на сервере и управления ими.

Trianon
Да, я в курсе. Но каким образом пользователи делят файл "sess_name-of-session", в котором и находятся сессионные переменные? Ведь файлы типа "sess_sid" для именованной сессии пустые.

   
 
 автор: Trianon   (09.12.2007 в 23:48)   письмо автору
 
   для: Alex14   (09.12.2007 в 23:40)
 

В этом случае идентификатор сессии передается дополнительным параметром (GET или POST) запроса.

   

Сообщения:  [1-10]    [11-20]  [21-22] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования