За последние 24 часа нас посетили 22867 программистов и 1238 роботов. Сейчас ищут 705 программистов ...

Время жизни сессии

Тема в разделе "PHP для новичков", создана пользователем Алекс8, 20 окт 2018.

  1. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    Столкнулся вот с какой проблемой.. есть чат на сокетах.. и принимаем и отправляем сообщения через сокеты.. что бы общаться в чате пользователь должен быть авторизирован на странице.. авторизация через сессии делается..
    но через некоторое время сессия умирает... я так понимаю потому что считается что нет активности.. хотя сокет соединение остается открытым.. каждые 5 секунд по таймеру отправляется служебное сообщение через сокеты..
    как лучше выйти из этой ситуации?
    1. Увеличить время жизни сессии?
    2. Поставить ajax таймер и каждые 5-10 минут дергать наш сервер что бы не было впечатления неактивности))
     
  2. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
  3. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    предлагаешь подменить нативные сессии на редис??
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    @Алекс8 а ты как-то авторизуешь пользователя на работу с сокетами? Там есть какой-то токен или что?
    --- Добавлено ---
    П.С. В любом случае, ты бы мог помимо сокетов делать веб-запрос раз в 10 мин, скажем, который поддерживал бы жизнь в сессии. Ну какой-нибудь фрейм или картинку с заголовком Refresh...
    Но мне кажется, это хак :)
     
  5. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    по сути только проверяю ID сессии и все..
    1. Чел вводит имя для чата и нажимает ВХОД
    2. На сервере создается запись в БД с его именем, ИД сессии и ИД чата..
    3. От попадает на страницу чата - открывается соединение, вместе с открытием соединения отсылаются ИД чата, ИД пользователя в базе, ИД сессии, имя пользователя))
    4. Срабатывает событие onConnect в этот момент я соединение записываю в массив + достаю из базы запись пользователя по условию всех его данных которые отправлены на сервер в гет параметре.. если совпадает - тогда продолжаем работу, слушаем сокет.. если нет - то разрываю соединение..
    5. Каждый раз когда пользователь что то отправляет на сокет - отсылается ИД сессии и ИД пользователя.. и сверяется так..

    ПЫСЫ да.. по сути самое простое решение это тайме и аяксом дергать сервер.. но я думал может есть что то кошерное для этого случая))