Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   маленький вопросик про сессии (http://forum.oszone.net/showthread.php?t=30933)

FADE 21-10-2004 21:51 212135

есть

session_start();
$_SESSION['last']="last";
$_SESSION['new']="new";

как распечать на экране заведенные сессии если я незнаю названий их элементов в массиве??

т.е. на экране должно быть:
last
new

вариант с echo $_SESSION[0].$_SESSION[1] не проходит(((

подскажите плз

Oaxa 21-10-2004 23:34 212136

Мне почему-то кажется, что это должно тебе помочь:
foreach ($_SESSION as $key => $value)
   echo "Key: $key; Value: $value<br />\n";

FADE 23-10-2004 20:57 212137

не, не помогло:)

идея такая, я хотел сделать мониторинг тех кто присутствует из зарегиинных на сайте.

т.е.
для каждого авторизированого:

session_start();
$_SESSION['nick']="индивидуальный ник или логин";

а на другой страничке я хотел сделать чтото типа печать всех $_SESSION['nick'] которые заведены в течении 24 минут.

П.С.
24 минуты, это значение по умолчанию столько максимум хранится сессия после последнего отправления с браузера посетителя до сервера(проще говоря с момента последнего обновления)

Добавлено:

можно после

session_start();
$_SESSION['nick']="индивидуальный ник или логин";

записывать $_SESSION['nick'] в файл и тогда получится файл имен тех кто на сайте.

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

Oaxa 23-10-2004 23:17 212138

Переменная $_SESSION уникальна для каждой сессии. В этом ее смысл. Ты не сможешь со своей отдельной страницы получить информацию о сессиях пользователей, находящихся на сайте. Долее того, если ты запустишь две копии браузера на своем компьютере, то для каждого из них будет создана своя переменная $_SESSION.
session.gc_maxlifetime о которой ты говоришь, это время, через которое сессия считается устаревшей, но это еще не значит, что информация о ней будет сразу же удалена с сервера. Это (уборка мусора) происходит периодически. Почитай о session.gc_probability и session.gc_divisor.
Идея хранить список пользователей в файле хороша, но спешу огорчить - не нова. В PHP есть готовый механизм для работы с сессиями, и ты движешься в правильном направлении. Все сессии всех пользователей (по умолчанию) сохраняются в отдельные файлы (можно организовать их хранение и в MySQL). Анализируя эти файлы ты как раз и можешь получить информацию о всех пользователях на твоем сайте. Вот только одно но: ты не можешь узнать (в общем случае) о том, что человек покинул сайт. Об этом можно судить лишь по времени его бездействия (и соответственно, по времени последнего изменения его файла сессии на диске). Если организовать хранениее сессий в БД, то, как мне кажется, информацию об активности пользователей можно будет извлекать быстрее и удобнее.


[s]Исправлено: Oaxa, 23:27 23-10-2004[/s]

FADE 23-10-2004 23:34 212139

Код:

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

по умолчанию 24 минуты.

Код:

Все сессии всех пользователей (по умолчанию) сохраняются в отдельные файлы (можно организовать
 их хранение и в MySQL)

а в каком по умолчанию?? я искал не нашел..

а разве программно не хранится ни в какой переменной все переменные для каждого пользователя SESSION ?
разве нет глобального массива?((

[s]Исправлено: FADE, 23:35 23-10-2004[/s]

Oaxa 23-10-2004 23:45 212140

FADE
Цитата:

по умолчанию 24 минуты.
Это означает, что через 24 минуты сессия считается устаревшей и при следующем удобном случае файл сессии будет удален. Уборка мусора (удаение устаревших файлов сессий) происходит (по умолчанию) 1 раз на 1000 вызовов session_start();
Цитата:

а в каком по умолчанию?? я искал не нашел..
В php.ini session.save_path = "/tmp" (опять таки, по умолчанию)
Цитата:

а разве программно не хранится ни в какой переменной все переменные для каждого пользователя SESSION ?
Переменная $_SESSION, точнее ее содержимое между вызовами session_start() сохраняется в файле.
Цитата:

разве нет глобального массива?((
Массив глобален, но время его глобальности ограничивается временем исполнения скрипта.

оффтопик: Оверквотинг оверквотинга оверквотингом не является

[s]Исправлено: Oaxa, 0:02 24-10-2004[/s]

FADE 24-10-2004 11:20 212141

Oaxa
а все, понял почему у меня нет папки tmp, я в ини файле не раскоментировал строку
;session.save_path = /tmp

а вот в папке с пхп, есть какаето папка sessiondata там тоже какието сессии хранятся, там что?

Добавлено:

Код:

Уборка мусора (удаение устаревших файлов сессий)
происходит (по умолчанию) 1 раз на 1000 вызовов
 session_start();

т.е. для того чтобы проследить потерял ли связь с сервером один из посетителей я должен написать цикл в 1000 вызовов сесионстарт?) ну допустим это реально, а как опять же сделать так что если файл в tmp - мусор тотакоето имя в мониторинге посетителейсайта стирается из файла?

Oaxa 24-10-2004 15:13 212142

FADE
Цитата:

а вот в папке с пхп, есть какаето папка sessiondata там тоже какието сессии хранятся, там что?
Мне трудно предположить, что хранится у тебя в папке sessiondata, ибо у меня такой папки нет, но судя по ее названию, это именно то, о чем я и говорил - файлы сессий.
Цитата:

того чтобы проследить потерял ли связь с сервером один из посетителей я должен написать цикл в 1000 вызовов сесионстарт?)
Совсем необязательно. Я уже предлагал тебе почитать про session.gc_probability и session.gc_divisor. Изменяя значения этих переменных ты можешь добиться любой частоты уборки мусора, в том числе можешь заставить убирать его каждый раз при вызове session_start. Но я бы не стал так поступать, ибо на производительности это скажется не самым лучшим образом.
Я бы решал эту задачу так (вариант с MySQL не рассматриваю):
я бы читал содержимое папки /temp, выбирал бы из нее файлы сессий, смотрел бы время последнего изменения этих файлов, выбирал бы только те, которые были изменены за последние 24 минуты (или 5 минут, или 10) и дальше читал бы из них имена пользователей. Если файл был изменен за последние 24 минуты, значит пользователь на сайте проявлял какую-то активность и с большой степенью вероятности можно предполагать, что он на сайте.

FADE 24-10-2004 17:37 212143

все файлы в папке sessiondata весят 0 кб а названия их - сесии.
откуда читать имя сессии?

а хостер всегда разрешает доступ к этой папки из скрипта на сайте?

Oaxa 24-10-2004 19:39 212144

FADE
Цитата:

а хостер всегда разрешает доступ к этой папки из скрипта на сайте?
Всё, конечно же, зависит от каждого конкретного хостера. Скорее всего он не разрешит тебе доступ к /tmp, но в твоем случае это проще всего обойти, указав в конфигурации, где именно PHP должен хранить файлы сессий. Сделать это можно примерно так:
В в файле .htaccess укажи примерно следующую директиву:
Код:

php_value session.save_path = "/path/to/sessions"
P.S. Настоятельно рекомедую почитать внимательно все комментарии в php.ini, там все достаточно подробно описано.
Вау! Я получил Junior Member

[s]Исправлено: Oaxa, 19:40 24-10-2004[/s]


Время: 06:44.

Время: 06:44.
© OSzone.net 2001-