@Staspost

Почему пропадает сессия при авторизации с мобильных устройств?

Есть простой скрипт авторизации, который без проблем работает в нескольких браузерах на компьютере:
<?php
session_start();
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
mb_internal_encoding("UTF-8");
require 'lib/db.php';
// Создаем переменную для сбора данных от пользователя по методу POST
$data = $_POST;
// Пользователь нажимает на кнопку "Авторизоваться" и код начинает выполняться
if(isset($data['do_login'])) { 
$pass=htmlspecialchars($data['inputPassword']);
$pass=strip_tags($pass);
$pass=addslashes($pass);
$pass=trim($pass);
$mail=htmlspecialchars($data['input_Email']);
$mail=strip_tags($mail);
$mail=addslashes($mail);
$mail=trim($mail);
 // Создаем массив для сбора ошибок
 $errors = array();
 // Проводим поиск пользователей в таблице users
 	$query = "SELECT id, login, password FROM users WHERE email='" . mysqli_real_escape_string($link, $mail) . "'";
    $result = mysqli_query($link, $query);
    if (!$result) die ("Сбой при доступе к БД: " . mysqli_error($link));
    $row = $result->fetch_assoc();
	if($row != null) {
	    $id = $row["id"];
	    $login = $row["login"];
	    if(password_verify($pass, $row["password"]))
	    {
	    // Все верно, пускаем пользователя
 		$_SESSION['logged_user'] = $id;
 		$_SESSION['login_user'] = $login;
 		mysqli_free_result($result); 		
 	$query = "SELECT size FROM usersSettings WHERE user=" . $_SESSION['logged_user'];
    $result = mysqli_query($link, $query);
    if (!$result) die ("Сбой при доступе к БД: " . mysqli_error($link));
    $row = $result->fetch_assoc();
    $size = $row['size'];
    mysqli_free_result($result);
 	$_SESSION['size'] = $size;	 		
               header('Location:  /');
	    }
	    else echo "Неверно";
		}
		else {
		    
		     mysqli_free_result($result);
		     echo "Данные не найдены";
		}
if(!empty($errors)) {
		echo '<div style="color: red; ">' . array_shift($errors). '</div><hr>';
	}
}
?>

Т.е. пользователь вводит логин и пароль, нажимает на кнопку "Отправить", переходит на страницу авторизации, где ему устанавливаются переменные сессии и он возвращается на главную страницу.
На компьютере все работает правильно, но при этом с телефонов (проверял и с Андроида и с Айфона) сессия исчезает после переадресации через header('Location: /');
Я проверял, авторизация срабатывает на самой странице скрипта авторизации (выводил переменную сессии после ее присваивания), но после переадресации на главной странице этой переменной сессии уже нет - Undefined index.
Почему она пропадает и как это исправить?
  • Вопрос задан
  • 391 просмотр
Пригласить эксперта
Ответы на вопрос 1
@Staspost Автор вопроса
Нашел источник проблемы: в файле .htaccess был прописан заголовок
Header set Set-Cookie HttpOnly;Secure
Если убрать атрибут Secure, то на мобильных все работает. Если поставить - перестает работать. Сайт на https.
В описании данного атрибута указано, что
Атрибут Secure для куков гарантирует, что куки никогда не будут приняты через HTTP. То есть браузер отклоняет куки с данным атрибутом, если соединение не происходит через HTTPS.

В чем тут проблема, почему вдруг соединение перестает происходить через https, если сайт именно на нем?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы