2012-06-29 3 views
3

Можно создать дубликат:
Find Number of Open Sessions
Access active sessions in PHPГраф номера активных сеансов

Когда пользователь заходит на веб-страницу, переменная сеанса создается для пользователя, и мне интересно, если это можно подсчитать количество активных сеансов?

+0

Активные сеансы всех участников на сайте? – hakre

+0

Возможные дубликаты: [Найти количество открытых сеансов] (http://stackoverflow.com/questions/679657/find-number-of-open-sessions), [Доступ к активным сеансам в PHP] (http://stackoverflow.com/questions/3426844/access-active-sessions-in-php) и [Цитирование всех сессий сервера в PHP] (http://stackoverflow.com/questions/675913/looping-through-all-a-servers- session-in-php) – mellamokb

+0

Использование обработчика сеанса по умолчанию? 'sess_ *' файлы в разделе 'session.save_path'? – Leigh

ответ

2

Вы могли бы получить количество сессий с этим:

$sessionCount = count(glob(session_save_path()."/*")); 

Однако, вам нужно будет убедиться, что сбор мусора сессии настроен правильно, так что вы не получите мертвые файлы сеансов там.

+3

Если session_save_path() есть/tmp, это может быть сильно ошибочным. – Leigh

+0

Предполагается, что вы используете механизм хранения сеанса по умолчанию (файл), и он не используется ни с каким другим приложением PHP. –

+0

Правда. Я забыл, что я обычно создаю папку специально для файлов сеансов ... –

1

Сессии хранятся в файлах temp в папке session.save_path (в ini-файле). Каждый файл начинается с «sess_». Я думаю, вы могли бы подсчитать количество этих файлов, чтобы узнать, сколько сеансов активны.

+0

Хм, наверное, у меня нет доступа к файлу, если я использую веб-отель? –

+0

Прошу прощения, я не знаю, что вы подразумеваете под веб-отелем? Это общий хостинг? –

+1

@Phenix По-видимому, некоторые хостинговые компании используют свой хостинг как «веб-отель». Gotta love marketers –

3

Когда пользователь приходит на веб-страницу, для пользователя создается переменная сеанса, и мне интересно, можно ли подсчитывать количество активных сеансов?

Все, что вы храните что-то, можно посчитать. Однако по умолчанию значения в сеансах для каждого пользователя, PHP не отслеживает все сеансы вместе или что-то еще.

Так что вам решать создать этот контекст. Например, вы можете написать собственный обработчик сеанса.

Это стало намного проще с PHP 5.4, потому что теперь вы можете расширить стандартный обработчик сеанса и просто добавить необходимые функции. См. Страницу руководства: The SessionHandler class

Итак, как это может работать? Каждый раз, когда сеанс находится там, вы записываете в хранилище данных общий, что есть активный сеанс. Если сеанс get уничтожен, например. путем сбора мусора или из-за того, что вы сравниваете время и время, прошедшее с момента последнего действия, вы можете подсчитать это через общий хранилище данных.

+0

Если вы просто хотите немного поэкспериментировать, в библиотеке под названием Serialized есть пример просмотра файлов сеансов, который может быть интересен вам, когда вы просто хотите играть отдельно от самого обработчика сеанса: https://github.com/ ktomk/Serialized/blob/master/examples/03-session/example-viewer.php – hakre

+0

Это превосходный вариант использования базы данных для сеансов. Тогда вы можете буквально просто подсчитать количество записей, представляющих активные сеансы. –

+1

@ConcordusПриложения: Да, вы можете дать ему столбец временной метки, например. Тем не менее, для сеансов рассмотрите некоторое хранилище, которое выполняется быстрее, например. память: [Не только SQL - memcache и MySQL 5.6] (http://schlueters.de/blog/archives/152-Not-only-SQL-memcache-and-MySQL-5.6.html) – hakre

Смежные вопросы