Показать полную графическую версию : маленький вопросик про сессии
есть
session_start();
$_SESSION['last']="last";
$_SESSION['new']="new";
как распечать на экране заведенные сессии если я незнаю названий их элементов в массиве??
т.е. на экране должно быть:
last
new
вариант с echo $_SESSION[0].$_SESSION[1] не проходит(((
подскажите плз
Мне почему-то кажется, что это должно тебе помочь:
foreach ($_SESSION as $key => $value)
echo "Key: $key; Value: $value<br />\n";
не, не помогло:)
идея такая, я хотел сделать мониторинг тех кто присутствует из зарегиинных на сайте.
т.е.
для каждого авторизированого:
session_start();
$_SESSION['nick']="индивидуальный ник или логин";
а на другой страничке я хотел сделать чтото типа печать всех $_SESSION['nick'] которые заведены в течении 24 минут.
П.С.
24 минуты, это значение по умолчанию столько максимум хранится сессия после последнего отправления с браузера посетителя до сервера(проще говоря с момента последнего обновления)
Добавлено:
можно после
session_start();
$_SESSION['nick']="индивидуальный ник или логин";
записывать $_SESSION['nick'] в файл и тогда получится файл имен тех кто на сайте.
но как проследить когда ктото ушел с сайта, отключился от интернета и удалить его имя из файла??
Переменная $_SESSION уникальна для каждой сессии. В этом ее смысл. Ты не сможешь со своей отдельной страницы получить информацию о сессиях пользователей, находящихся на сайте. Долее того, если ты запустишь две копии браузера на своем компьютере, то для каждого из них будет создана своя переменная $_SESSION.
session.gc_maxlifetime о которой ты говоришь, это время, через которое сессия считается устаревшей, но это еще не значит, что информация о ней будет сразу же удалена с сервера. Это (уборка мусора) происходит периодически. Почитай о session.gc_probability и session.gc_divisor.
Идея хранить список пользователей в файле хороша, но спешу огорчить - не нова. В PHP есть готовый механизм для работы с сессиями, и ты движешься в правильном направлении. Все сессии всех пользователей (по умолчанию) сохраняются в отдельные файлы (можно организовать их хранение и в MySQL). Анализируя эти файлы ты как раз и можешь получить информацию о всех пользователях на твоем сайте. Вот только одно но: ты не можешь узнать (в общем случае) о том, что человек покинул сайт. Об этом можно судить лишь по времени его бездействия (и соответственно, по времени последнего изменения его файла сессии на диске). Если организовать хранениее сессий в БД, то, как мне кажется, информацию об активности пользователей можно будет извлекать быстрее и удобнее.
Исправлено: Oaxa, 23:27 23-10-2004
о которой ты говоришь, это время, через которое сессия считается устаревшей,
но это еще не значит, что информация о ней будет сразу же удалена с сервера. Это (уборка мусора) происходит периодически
по умолчанию 24 минуты.
Все сессии всех пользователей (по умолчанию) сохраняются в отдельные файлы (можно организовать
их хранение и в MySQL)
а в каком по умолчанию?? я искал не нашел..
а разве программно не хранится ни в какой переменной все переменные для каждого пользователя SESSION ?
разве нет глобального массива?((
Исправлено: FADE, 23:35 23-10-2004
FADE
по умолчанию 24 минуты.
Это означает, что через 24 минуты сессия считается устаревшей и при следующем удобном случае файл сессии будет удален. Уборка мусора (удаение устаревших файлов сессий) происходит (по умолчанию) 1 раз на 1000 вызовов session_start();
а в каком по умолчанию?? я искал не нашел..
В php.ini session.save_path = "/tmp" (опять таки, по умолчанию)
а разве программно не хранится ни в какой переменной все переменные для каждого пользователя SESSION ?
Переменная $_SESSION, точнее ее содержимое между вызовами session_start() сохраняется в файле.
разве нет глобального массива?((
Массив глобален, но время его глобальности ограничивается временем исполнения скрипта.
оффтопик: Оверквотинг оверквотинга оверквотингом не является
Исправлено: Oaxa, 0:02 24-10-2004
Oaxa
а все, понял почему у меня нет папки tmp, я в ини файле не раскоментировал строку
;session.save_path = /tmp
а вот в папке с пхп, есть какаето папка sessiondata там тоже какието сессии хранятся, там что?
Добавлено:
Уборка мусора (удаение устаревших файлов сессий)
происходит (по умолчанию) 1 раз на 1000 вызовов
session_start();
т.е. для того чтобы проследить потерял ли связь с сервером один из посетителей я должен написать цикл в 1000 вызовов сесионстарт?) ну допустим это реально, а как опять же сделать так что если файл в tmp - мусор тотакоето имя в мониторинге посетителейсайта стирается из файла?
FADE
а вот в папке с пхп, есть какаето папка sessiondata там тоже какието сессии хранятся, там что?
Мне трудно предположить, что хранится у тебя в папке sessiondata, ибо у меня такой папки нет, но судя по ее названию, это именно то, о чем я и говорил - файлы сессий.
того чтобы проследить потерял ли связь с сервером один из посетителей я должен написать цикл в 1000 вызовов сесионстарт?)
Совсем необязательно. Я уже предлагал тебе почитать про session.gc_probability и session.gc_divisor. Изменяя значения этих переменных ты можешь добиться любой частоты уборки мусора, в том числе можешь заставить убирать его каждый раз при вызове session_start. Но я бы не стал так поступать, ибо на производительности это скажется не самым лучшим образом.
Я бы решал эту задачу так (вариант с MySQL не рассматриваю):
я бы читал содержимое папки /temp, выбирал бы из нее файлы сессий, смотрел бы время последнего изменения этих файлов, выбирал бы только те, которые были изменены за последние 24 минуты (или 5 минут, или 10) и дальше читал бы из них имена пользователей. Если файл был изменен за последние 24 минуты, значит пользователь на сайте проявлял какую-то активность и с большой степенью вероятности можно предполагать, что он на сайте.
все файлы в папке sessiondata весят 0 кб а названия их - сесии.
откуда читать имя сессии?
а хостер всегда разрешает доступ к этой папки из скрипта на сайте?
FADEа хостер всегда разрешает доступ к этой папки из скрипта на сайте?
Всё, конечно же, зависит от каждого конкретного хостера. Скорее всего он не разрешит тебе доступ к /tmp, но в твоем случае это проще всего обойти, указав в конфигурации, где именно PHP должен хранить файлы сессий. Сделать это можно примерно так:
В в файле .htaccess укажи примерно следующую директиву:
php_value session.save_path = "/path/to/sessions"
P.S. Настоятельно рекомедую почитать внимательно все комментарии в php.ini, там все достаточно подробно описано.
Вау! Я получил Junior Member
Исправлено: Oaxa, 19:40 24-10-2004
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.