session сбрасывается после перезапуска браузера (моб) php

123
21 августа 2021, 18:10

Подскажите пожалуйста, есть такой код авторизации на сайте.

<?php
session_start();
$db = mysqli_connect("localhost", "", "", "");
if (isset($_POST['login']) && !empty($_POST['password']) && isset($_POST['password']) && !empty($_POST['login'])) {
    $query  = sprintf("SELECT * FROM users WHERE password='".$_POST['password']."' AND login='".$_POST['login']."' LIMIT 1;", mysqli_real_escape_string($db,$_POST['password']));
    mysqli_set_charset($db, 'utf8');
    $result = mysqli_query($db, $query);
    if (mysqli_num_rows($result) > 0) {
        $row                 = mysqli_fetch_assoc($result);
        $_SESSION['user_id'] = $row['id'];
    }
}
if (!isset($_SESSION['user_id'])) {
// Показываем окно авторизации
}
else {
// Личный кабинет
}
?>

Но при перезапуске мобильного браузера опять запрашивает окно авторизации. В чем может быть проблема? В десктопной версии все нормально.

Answer 1

Ну, ответ-не ответ, но в комментах писать несподручно. Что может быть(имхо):

  1. Нет увязки по сессиям с мобильной версией
  2. Настройка мобильного браузера удаляет все при перезапуске - куки/сессии и прочее.

Попробуйте авторизоваться в мобильной и затем перезапустить браузер - если слетит, значит, весьма вероятен затык с этой стороны.

Да - и непонятно из Вашей информации - у Вас отдельная моб версия сайта, или адаптив?

Если адаптив, то скорее всего именно браузер, поскольку все остается, только вид меняется - при обычном варианте, конечно.

Answer 2

Механизм сессий PHP не живёт без куки с id сессии (ну, вообще-то живёт, но тогда sid должен быть настроен передаваться через GET параметры).

Кука эта выставляется со временем жизни session.cookie_lifetime. Настройка по-умолчанию - 0. Что предполагает:

The value 0 means "until the browser is closed."

Значение 0 означает "пока браузер не будет закрыт". Некоторые браузеры согласны с такой трактовкой, некоторые нет.

Поэтому наблюдаемое различие поведения является нормой и никакой проблемы нет. Так задумано разработчиками проверенных вами браузеров.

Answer 3

Для себя нашел такой вариант.

$lifetime = 3600;
session_set_cookie_params($lifetime);
session_start();
READ ALSO
htmlentities() expects parameter 1 to be string, array given

htmlentities() expects parameter 1 to be string, array given

День добрыйОбновляю Laravel и ловлю эту ошибку (ErrorException in helpers

211
Рекурсивный вариант array_change_key_case

Рекурсивный вариант array_change_key_case

Есть ли вариант функции array_change_key_case(), работающий со вложенными массивами?

150
Регулярное выражение для цифр и символа pipe (труба) |

Регулярное выражение для цифр и символа pipe (труба) |

Подскажите как правильно составить регулярное выражение для проверки строи которая может содержать только цифры и возможны(но не обязательны)...

80
В wp вывод архива только по месяцам?

В wp вывод архива только по месяцам?

Нужно вывести отдельно сылки на архив по годам и по месяцам

86