Есть простой скрипт авторизации, который без проблем работает в нескольких браузерах на компьютере:
<?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.
Почему она пропадает и как это исправить?