|
|
|
| Здравствуйте,
возникла проблема - при попытке прочитать содержимое файла текущей сессии в строку 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? | |
|
|
|
|
|
|
|
для: crydown
(25.02.2009 в 12:27)
| | Если вас интересует содержимое сесии, и если оно не пустое, то зачем такой огород?:
print_r($_SESSION); | |
|
|
|
|
|
|
|
для: sim5
(25.02.2009 в 12:44)
| | мне нужны все активные сессии, а не только текущая | |
|
|
|
|
|
|
|
для: crydown
(25.02.2009 в 13:04)
| | А содержимое файла сессии думаете содержит индитефикаторы всех сессий, да еще впридачу выдаст вам их данные? Вы вопрос свой почитайте. | |
|
|
|
|
|
|
|
для: sim5
(25.02.2009 в 13:12)
| | почитайте мой вопрос и мой код - там все ясно)
вопрос в том, что я читаю все файлы из папки, где хранятся сессии юзеров, зашедших на сайт. и мне нужно прочитать каждую сериализованную сессию в строку и произвести с каждой строкой некоторые манипуляции. проблема в том, что file_get_contents() возвращает пустую строку только в случае, если файл, который стоит параметром в этой функции - это файл текущей моей сессии. | |
|
|
|
|
|
|
|
для: crydown
(25.02.2009 в 13:16)
| | Имя группы сессии
На одном и том же сайте могут существовать сразу несколько сценариев, которые нуждаются в услугах поддержки сессий PHP. Они "ничего не знают" друг о друге, поэтому временные хранилища для сессий должны выбираться не только на основе идентификатора пользователя, но и на основе того, какой из сценариев запросил обслуживание сессии. Для наглядности рассмотрим пример:
Пусть разработчик А написал сценарий счетчика. Он использует переменную $count, и не имеет никаких проблем, до тех пор, пока разработчик В, ничего не знающий о сценарии А, не создал систему статистики, которая тоже использует сессии. Самое ужасное, что он также регистрирует переменную $count, не зная о том, что она уже занята. В результате, как всегда, страдает пользователь: запустив сначало сценарий разработчика В, а потом - А, он видит, что данные счетчиков перемешались.
Нужно как-то разграничить сессии, принадлежащие одному сценарию, от сессии, принадлежащих другому. К счастью, разработчики PHP предусмотрели такое положение вещей. Можно давать группам сессии непересекающиеся имена, и сценарий, знающий имя своей группы сессии, сможет получить к ней доступ. Вот теперь-то разработчики А и В могут оградить свои сценарии от проблем с пересечением имен переменных. Достаточно в первой программе указать PHP, что будет использоваться группа с именем, например, sesA, а во второй - sesB.
Идентификатор сессии
Идентификатор сессии является именем временного хранилища, которое будет использовано для хранения данных сессии между запусками сценария. Один SID - одно хранилище. Нет SID, нет и хранилища, и наоботот. Как же соотностится идентификатор и имя группы? Имя - это всего лишь собирательное название для нескольких сессий (то есть, для многих SID), запущенных разными пользователями. Один и тот же клиент никогда не будет иметь два различных SID в пределах одного имени группы. Но его браузер вполне может работать с несколькими SID, расположенными логически в разных "пространствах имен".
Итак, все SID уникальны и однозначно определяют сессию на компьютере, выполняющем сценарий - независимо от имени сессии. Имя же задает пространство имен, в которое будут сгруппированны сессии, запущенные разными пользователями. Один клиент может иметь сразу несколько активных пространств имен (то есть несколько имен групп сессий).
PS. И еще можно поискать литературу для чтения - что же такое сессия. | |
|
|
|
|
|
|
|
для: sim5
(25.02.2009 в 13:20)
| | тем не менее, я могу открыть директорию session_save_path(), открыть по очереди файлы сессий sessA, sessB и т.д. и получить из них данные. но т.к. у меня сессия с ид MYID, то я не могу почему-то прочитать этот файл с именем sessMYID. | |
|
|
|
|
|
|
|
для: crydown
(25.02.2009 в 13:26)
| | Тем не менее все поумничали и ничего не ответили. Вчитываться не хотят в проблему.
Сам столкнулся с этой проблемой. Хз как решить... | |
|
|
|
|
|
|
|
для: rezon73
(03.05.2010 в 16:32)
| | Вы хотите, просто говоря, забраться в чужой амбар, так? | |
|
|
|
|
|
|
|
для: 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();
}
}
|
| |
|
|
|
|
|
|
|
для: rezon73
(07.05.2010 в 21:13)
| | Дело в том, что иногда разработчику требуется выдрать информацию из файлов сессий
не затруднит привести пример? | |
|
|
|