Как управлять сессиями пользователей на сервере?

Тема в разделе "PHP", создана пользователем verfaa, 31 май 2017.

Статус темы:
Закрыта.
Модераторы: latteo
  1. verfaa

    verfaa

    Регистр.:
    29 янв 2007
    Сообщения:
    388
    Симпатии:
    47
    На сайте регистрируются пользователи, заходят в пользовательскую часть сайта используя логин-пароль. В БД MySQL sessions пишутся активные сессии этих пользователей, чтобы подсчитывать сколько пользователей сейчас онлайн и других подобных целей. Как получить доступ и управлять пользовательскими сессиями в PHP 5.6 ? Вот например я хочу получить доступ к данным сессии 7dkb0qepg9v84dg9nm5gn0c4t0, id которой хранится в моей таблице как это сделать? И как держать актуальными данные в таблице sessions, чтобы она содержала только сессии пользователей, которые в данный момент на сайте? Может перебирать все сессии в цикле foreach, а в сессию каждому пользователю писать

    Код:
    $_SESSION['last_access'] = time();
    И затем

    Код:
    foreach ($sessions_from_mysql_table as $session){ if( (time() - $_SESSION['last_access']) > 120 ) // Delete session from mysql tbl }
    Как лучше сделать, подскажите. Сайт достаточно большой, пользователей > 160к, поэтому хотелось бы чтобы код давал оптимальную нагрузку на сервер.
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.609
    Симпатии:
    1.538
    Просто так сессии в БД не попадут, у тебя уже есть php код который их туда пихает... Если это приличная либа, то нужный функционал скорее всего уже есть.
    Если самопис, то юзай http://php.net/manual/ru/function.session-set-save-handler.php
    Полагаю, что навесить обновление last_access можно на write или close
    А чистка происходит по правилам колбека gc
    Цикл foreach с перебором всей таблицы - это перебор... Лучше всего такое mysql запросом решать.
     
Статус темы:
Закрыта.