@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.
Почему она пропадает и как это исправить?
  • Вопрос задан
  • 293 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Staspost Автор вопроса
Нашел источник проблемы: в файле .htaccess был прописан заголовок
Header set Set-Cookie HttpOnly;Secure
Если убрать атрибут Secure, то на мобильных все работает. Если поставить - перестает работать. Сайт на https.
В описании данного атрибута указано, что
Атрибут Secure для куков гарантирует, что куки никогда не будут приняты через HTTP. То есть браузер отклоняет куки с данным атрибутом, если соединение не происходит через HTTPS.

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

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

Войти через центр авторизации
Похожие вопросы