Ответы пользователя по тегу Сессии
  • Где хранить id сессии php?

    Stalker_RED
    @Stalker_RED
    Пользователь может не только куки, но и localStorage отключить.

    Самый распространенный способ - куки. На втором месте JWT. Если и то и другое отключено, можно передавать идентификатор даже как GET-параметр, например (и это уже небезопасно, особенно если соединение не зашифровано).
    Ответ написан
    Комментировать
  • Как на JS узнать время проведенное на сайте (с листанием страниц)?

    Stalker_RED
    @Stalker_RED
    1. Проверяете localStorage, если пусто - пишете текущее время.
    2. если не пусто, но промежуток слишком большой, считаете что началась "новая" сессия, обновляете время в localStorage
    3. и сравниваете с текущим, выясняете, не пора ли показать попап.
    Ответ написан
    Комментировать
  • Как задать идентификатор сессии?

    Stalker_RED
    @Stalker_RED
    Вот причина:
    CQ0SjCq.png

    Проверьте, чтобы настройка session.cookie_lifetime применялась ПЕРЕД session_start()
    А еще лучше настроить это в php.ini или сразу в точке входа.
    Ответ написан
    1 комментарий
  • Как убивать сессию после закрытия вкладки?

    Stalker_RED
    @Stalker_RED
    Каким способом можно убивать сессию при закрытии вкладки?
    У вас там в тегах php, потому я предположу, что вы о вот этих сессиях.

    Ответ: никаким.

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

    Можно прикрутить трюк с beforeunload как предлагает dollar, но это уже не чисто на PHP решение. Ну и возможны ложные срабатывания, когда открыты несколько вкладок. Придется дополнительные проверки делать.

    Еще можно сессионной куке не устанавливать Expires, и тогда она должна удалиться сама при закрытии сессии браузером, но... есть браузерные настройки и плагины, которые позволяют не обрывать сессию при закрытии вкладки и вообще никогда.

    Потому предлагаю не мучиться, и просто выставить удобное для вас время жизни сессии.
    Ответ написан
    Комментировать
  • Как сервер определяет что браузер закрыт (сессия)?

    Stalker_RED
    @Stalker_RED
    Когда вы закроете браузер вот эти вот куки будут удалены. По их отсутствию сервер и определит.
    yNGCPiK.png

    Можно настроить браузер (или поставить плагины) которые будут сохранять текущие сессии. В хроме я использую session buddy, в фоксе тоже как-то работает, может TabMixPlus это делает, может какая-то галка в настройках, не помню уже.
    Ответ написан
    Комментировать
  • Сохранение данных get параметров аналитики в сессию, как правильно?

    Stalker_RED
    @Stalker_RED
    1. Слишком мало информации вы дали, чтобы понять насколько это целесообразно.

    2.
    как правильно идентифицировать разных пользователей, чтобы они не перезаписывали друг-друга
    это что за дичь? У каждого юзера свой идентификатор и они не перезаписывают друг друга.

    и установить время жизни сессии для одного пользователя например 60 минут

    Есть параметр session.gc_maxlifetime, но он меняет время жизни для всех сайтов на сервере. Если вас такой вариант не устраивает, можете реализовать очистку сессий самостоятельно.
    Ответ написан
    1 комментарий
  • Как определить сессию отдельного пользователя?

    Stalker_RED
    @Stalker_RED
    Вы не пробовали открыть документацию и почитать?

    Функция session_start() создает сессию, либо возобновляет существующую, основываясь на идентификаторе сессии, переданном через GET или POST запрос, либо переданный через cookie.
    Ответ написан
    Комментировать
  • Почему кука не умирает после закрытия браузера?

    Stalker_RED
    @Stalker_RED
    А браузер запоминает какие вкладки были открыты, и потом восстанавливает? Если да, то и сессию наверное восстанавливает. Решается настройками браузера.
    Ответ написан
    2 комментария
  • Путаница в куках. Почему заданный куки применяется со второго клика?

    Stalker_RED
    @Stalker_RED
    Примерно так:
    $default = 'en'; // по умолчанию
    $allowed = ['en', 'ru', 'fr']; // допустимые языки
    $current = empty($_COOKIE["lang"]) ? $default : $_COOKIE["lang"];
    $new = empty($_POST["lang"]) ? null : $_POST["lang"];
    if ($new && // если был пост запрос
      in_array($new, $allowed) && // и если новое значение в списке допустимых
      $new !== $current) { // и отличается от текущего
      $current = $new;
      setcookie("lang", $new, time()+60*60*24); // http://php.net/manual/ru/function.setcookie.php
    }
    
    require_once $current . '/function.php';

    И лучше бы убрать это из глобальной области видимости.
    Ответ написан
    Комментировать
  • Нужна помощь с записью в сессию по нажатию ссылки в Zend Framework 1.12.17, как?

    Stalker_RED
    @Stalker_RED
    Проще всего добавить в ссылку еще один параметр
    <a href='/?city&title=<?=urlencode($city->title)?>'><?=$city->title;?></a><br>


    И потом
    if (! empty($_GET['title'])) {
     ...
    }


    Но вообще весь этот код меня настораживает.
    Ответ написан
    3 комментария
  • Как проверять существует ли сессия?

    Stalker_RED
    @Stalker_RED
    Да, всё правильно.
    Проверить существует ли кука. Если да, то session_start() и проверить - не пустая ли.

    она будет пустой хоть как и удалять
    - смысл этой фразы не понял.

    function is_session_exists() {
        $sessionName = session_name();
        if (isset($_COOKIE[$sessionName]) || isset($_REQUEST[$sessionName])) {
            session_start();
            return !empty($_SESSION);
        }
        return false;
    }
    Ответ написан
  • Запутался в сессиях, распутайте меня?

    Stalker_RED
    @Stalker_RED
    $_SESSION["UserName"] // имя сессии есть допустим ivan
    Нет, это не имя сессии, а какое-то значение с ключом "UserName"
    Имя сессии по умолчанию равно "PHPSESSID", и меняется оно при помощи session_name() или в конфиге

    $_COOKIE["Test"] // имя кук есть допустим mysite.com
    Непонятно что вы имеете в виду. Это обращение к какой-то куке с именем "Test". Из вашего кода непонятно откуда она берется.

    // Уничтожаем сессию
    // Удаляем Cookie
    ...
    var_dump($_SESSION);
    var_dump($_COOKIE);

    Первый показывает Undefined variable
    Всё правильно, вы же сделали session_destroy

    Второй показывает:
    array(1) {
    ["PHPSESSID"]=>
    string(26) "ra7emp6j6vp6o85oqlclefi315"
    И тоже всё правильно, вы же не уничтожали куку "PHPSESSID".
    Ответ написан
    Комментировать
  • Пишу систему авторизации. Несколько вопросов

    Stalker_RED
    @Stalker_RED
    непонятно зачем вообще нужны пункты 3 и 4.
    я бы еще понял, если бы токен был одноразовый, а так вы просто повторяете существующий механизм сессии, навешивая на него какие-то лишние навороты.

    храните в сессии user_id и какой-то флаг is_logged и очищайте сессию при отлогине.
    Ответ написан
    Комментировать