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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: php. текущая cессия. как получить содержимое файла сессии?
 
 автор: crydown   (25.02.2009 в 12:27)   письмо автору
 
 

Здравствуйте,
возникла проблема - при попытке прочитать содержимое файла текущей сессии в строку file_get_contents() возвращает пустую строку.

OC Windows
php 5.2.6
apache 2.2.11

file_exists() возвращает true
is_readable() возвращает true
filesize() возвращает 75

код примерно такой:

$sessionSavePath = session_save_path();
$dir = dir($sessionSavePath);
while(($entry = $dir -> read()) !== false) {
if ($entry <> '.' && $entry <> '..'
&& file_exists($sessionSavePath . '/' . $entry)
&& is_readable($sessionSavePath . '/' . $entry)) {
$data = file_get_contents($sessionSavePath . '/' . $entry);
echo $data;
}
}

может что-то конкретно надо настроить в конфиге апача или php.ini?

  Ответить  
 
 автор: sim5   (25.02.2009 в 12:44)   письмо автору
 
   для: crydown   (25.02.2009 в 12:27)
 

Если вас интересует содержимое сесии, и если оно не пустое, то зачем такой огород?:
print_r($_SESSION);

  Ответить  
 
 автор: crydown   (25.02.2009 в 13:04)   письмо автору
 
   для: sim5   (25.02.2009 в 12:44)
 

мне нужны все активные сессии, а не только текущая

  Ответить  
 
 автор: sim5   (25.02.2009 в 13:12)   письмо автору
 
   для: crydown   (25.02.2009 в 13:04)
 

А содержимое файла сессии думаете содержит индитефикаторы всех сессий, да еще впридачу выдаст вам их данные? Вы вопрос свой почитайте.

  Ответить  
 
 автор: crydown   (25.02.2009 в 13:16)   письмо автору
 
   для: sim5   (25.02.2009 в 13:12)
 

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

  Ответить  
 
 автор: sim5   (25.02.2009 в 13:20)   письмо автору
 
   для: crydown   (25.02.2009 в 13:16)
 

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

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

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

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

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

PS. И еще можно поискать литературу для чтения - что же такое сессия.

  Ответить  
 
 автор: crydown   (25.02.2009 в 13:26)   письмо автору
 
   для: sim5   (25.02.2009 в 13:20)
 

тем не менее, я могу открыть директорию session_save_path(), открыть по очереди файлы сессий sessA, sessB и т.д. и получить из них данные. но т.к. у меня сессия с ид MYID, то я не могу почему-то прочитать этот файл с именем sessMYID.

  Ответить  
 
 автор: rezon73   (03.05.2010 в 16:32)   письмо автору
 
   для: crydown   (25.02.2009 в 13:26)
 

Тем не менее все поумничали и ничего не ответили. Вчитываться не хотят в проблему.
Сам столкнулся с этой проблемой. Хз как решить...

  Ответить  
 
 автор: sim5   (03.05.2010 в 18:00)   письмо автору
 
   для: rezon73   (03.05.2010 в 16:32)
 

Вы хотите, просто говоря, забраться в чужой амбар, так?

  Ответить  
 
 автор: rezon73   (07.05.2010 в 21:13)   письмо автору
 
   для: sim5   (03.05.2010 в 18:00)
 

Не в чужой амбар. Дело в том, что иногда разработчику требуется выдрать информацию из файлов сессий. И я эту проблему решил.
Но для начала некоторая особенность. Если id сессии не сгенерирована по умолчанию набором символов, а задана, например, sess_ttt, а не sess_7939d5715cc6715ca419c229e9cbf9d9, то содержимое сессии можно без проблем прочитать как текстовый файл.
Но нам ведь надо прочитать абсолютно все сессии? Это можно сделать чтением имени файла (из примера выше id=7939d5715cc6715ca419c229e9cbf9d9) и, задав такой же id, открываем сессию и распечатываем её содержимое.
Дабы не быть голословным, приведу код

if ($Handler = scandir ($SessionDir))
    {
    $count = count ($Handler);
    $users = 0;
    for ($i = 2; $i < $count; $i++)
        {
        $id_ses = substr($Handler[$i], 5);
        session_save_path($sessionpath);
        session_id($id_ses); 
        session_start();
        print_r($_SESSION);
        session_destroy();
        }
    }

  Ответить  
 
 автор: Valick   (07.05.2010 в 22:36)   письмо автору
 
   для: rezon73   (07.05.2010 в 21:13)
 

Дело в том, что иногда разработчику требуется выдрать информацию из файлов сессий
не затруднит привести пример?

  Ответить  
Rambler's Top100
вверх

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