Я пытаюсь повторить каждый активный сеанс, который был активен за последние 15 минут, я проверяю использование следующего кода для регистрации их последнего времени.
$_SESSION['last_seen'] = date("Ymd H:i:s");
Но я получаю эти ошибки при выполнении приведенного ниже кода, который содержит код выше этого текста.
Примечание: Неопределенный индекс: last_seen в C: \ xampp \ htdocs \ hk \ templates \ default \ index.php в строке 249 Предупреждение: недопустимое смещение строки 'last_seen' в C: \ xampp \ htdocs \ hk \ templates \ default \ index. php в строке 249
<?php foreach($_SESSION as $s){ if ($s['last_seen'] >= date("Ymd H:i:s", strtotime("-900 seconds"))) { echo $s['username']; } } ?>
Короче:
1) Сначала вам нужно каждый раз вспоминать session_start () (если вы этого не сделали).
2) Вы не можете читать из других сеансов с помощью собственного обработчика сеанса PHP. Вам нужно будет реализовать собственный обработчик сеанса.
Я думаю, вы только начали использовать PHP. Итак, вот некоторые основные объяснения, которые вам нужно знать о сети, PHP, сеансах и файлах cookie:
Файлы cookie: файлы cookie представляют собой небольшую информацию и отправляются в браузер клиента при загрузке страницы. Если браузер принимает cookie (что не всегда так), он отправляет эту информацию cookie по каждому запросу.
поэтому … делать что-то вроде
<?php setcookie('my_cookie', 'Hello World!', time() + 60 * 60);
Если клиент запрашивает эту страницу, и код, полученный выше, запускается, браузеру клиента предлагается сохранить файл cookie с вашего_domen.com с именем «my_cookie», содержащим «Hello World!».
Предполагая, что браузер принял этот файл cookie, он будет отправлять его при каждой загрузке страницы против your_domain.com – до тех пор, пока cookie не истек. Это позволяет хранить небольшую текстовую информацию на стороне клиента, и вы сможете получать и читать последующие запросы с помощью $ _COOKIE ['my_cookie'].
Так что это связано с сеансами? Без куки мы не сможем отслеживать клиента. Приложение PHP теряет информацию о сеансе между запросами. Если клиент наткнулся на вашу страницу, вызывая первый сеанс session_start (), PHP создаст Session Cookie с уникальным идентификатором и разместит где-то на пространстве файловой системы данные, хранящиеся в $ _SESSION. Это называется «хранилищем сеансов». Таким образом, вы можете начать записывать данные в $ _SESSION, например $_SESSION['last_seen'] = date("Ymd H:i:s");
, Браузер будет отправлять этот файл cookie каждый раз на ваш сервер при следующих нескольких запросах. Вызов session_start (), PHP теперь знает, что cookie сеанса уже установлен и считывает этот идентификатор. Если идентификатор совпадает с хранилищем сеанса, ранее сгенерированным, переменная $ _SESSION будет заполнена, и вы можете прочитать значение $ _SESSION ['last_seen']. Вы думали, что с $ _SESSION вы получите доступ ко всей информации о сеансе от любого пользователя, но это неверно. Хранилище сеансов просто даст вам данные конкретного идентификатора сеанса клиента. Как я уже упоминал ранее, вы не можете получить доступ к другим данным сеанса с помощью собственного обработчика сеанса PHP, однако вы можете реализовать свой собственный обработчик сеанса.
Большинство людей, которые начинают писать свой собственный обработчик сеансов, обычно используют базу данных MySQL в качестве хранилища сеансов. Я предпочитаю использовать Redis.
Это может помочь вам: Учебник по основному PHP-сеансу: http://www.phpro.org/tutorials/Introduction-To-PHP-Sessions.html
Написание собственного обработчика сеанса и использование MySQL: http://culttt.com/2013/02/04/how-to-save-php-sessions-to-a-database/
Я думаю, вы не понимаете глобальный массив $_SESSION
. Он содержит данные только для текущего сеанса пользователя (не для всех пользователей вашего сайта). Вы должны сохранить эти данные в memcached или базе данных.
Я предлагаю вам попробовать echo "<pre>"; print_r($_SESSION); echo "</pre>"
echo "<pre>"; print_r($_SESSION); echo "</pre>"
echo "<pre>"; print_r($_SESSION); echo "</pre>"
для устранения неполадок – это покажет вам структуру массива сеансов.
PS: Надеюсь, вы начали сеанс с помощью команды session_start()
?
Вы можете использовать strtotime
для сравнения двух дат
if (strtotime($s['last_seen']) >= strtotime('+10 minutes'))) { echo $s['username']; }