Я знаю, что по названию на этот вопрос здесь отвечали несколько раз, но ни одна из публикаций не предлагает мне правильного решения.Итак, я иду:
ПРОБЛЕМА:
У меня есть и файл index.php.Это базовая html-форма с полями user / password и кнопкой входа в систему.При нажатии на кнопку «Вход», функция с именем login () генерирует хэш для пароля.Затем пользователь + хэш сверяются с базой данных.Если доступ действителен, я добавляю некоторые значения в SESSION, возвращает true, а затем форма загружает php-файл с именем process_login.php, где все, что я делаю, это проверяю, является ли пользователь администратором или нет, и загружаю другую сеть в соответствии стот.Пока все хорошо.
process_login.php загружает нужный веб-сайт и может видеть значения SESSION (я пытался их напечатать, все в порядке).
Эти значения используются дляпроверьте, есть ли у текущего пользователя допустимый сеанс (залогинен) перед загрузкой любого веба.Вот как я добавляю переменные к СЕССИИ между прочим:
$user_id = preg_replace("/[^0-9]+/", "", $user_id);
$username = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $user);
$_SESSION['user_id'] = $user_id;
$_SESSION['username'] = $username;
$_SESSION['login_string'] = hash('sha512', $db_password . $user_browser);
Вот проблема: process_login.php загружает нужную сеть home.php.Затем home.php проверяет, является ли сеанс допустимым, с помощью функции login_check ().Первая строка этой функции:
// Check if all session variables are set
if (isset($_SESSION['user_id'], $_SESSION['username'], $_SESSION['login_string'])) {
И это не удалось.SESSION - это пустой массив, и я не знаю почему.
Читая возможные причины, люди всегда предлагают вызывать start_session () в начале каждого php-файла, где нам нужно использовать SESSION.Ну, я делаю.Я называю это в index.php, process_login.php и home.php, и все же ... ничего.Единственное место, которое я не называю, это файл functions.php, который я использую для объявления всех функций, которые я упомянул выше.это просто включенный файл, там ничего не загружается.
Вот как я начинаю сеанс:
function sec_session_start() {
$session_name = 'sec_session_id'; // Set a custom session name
$secure = SECURE;
// This stops JavaScript being able to access the session id.
$httponly = true;
// Forces sessions to only use cookies.
if (ini_set('session.use_only_cookies', 1) === FALSE) {
header("Location: ../error.php?err=Could not initiate a safe session (ini_set)");
exit();
}
// Gets current cookies params.
$cookieParams = session_get_cookie_params();
session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], $secure, $httponly);
// Sets the session name to the one set above.
session_name($session_name);
session_start(); // Start the PHP session
session_regenerate_id(); // regenerated the session, delete the old one.
}
Затем, в начале каждого файла, я устанавливаю этот фрагмент кода (код может немного отличаться, потому что файлы включения могут небыть таким же)
<?php
include_once 'includes/db_connect.php';
include_once 'includes/functions.php';
sec_session_start();
?>
Как видите, в конце я вызываю session_regenerate_id ().Я подозревал, что, возможно, это удаляло все в моей СЕССИИ, поэтому я прокомментировал это.Ничего не изменилось.home.php постоянно не видит, что находится на СЕССИИ.
Любая помощь будет принята с благодарностью.Я могу предоставить больше кода, если это необходимо.Кроме того, стоит упомянуть, что это не удается как локально (XAMPP), так и онлайн (веб-хостинг).
Приветствия
ОБНОВЛЕНИЕ:
При создании сессии яиспользуя функцию session_set_cookie_params () для ее настройки.Параметр SECURE - это определенное значение bool, для которого установлено значение true.Если я изменю это на ЛОЖЬ, все работает просто отлично.Я понимаю, что XAMPP не может использовать https (если вы не установили сертификат и т. Д.), Но я ожидаю, что это будет работать на сервере (он использует защищенные соединения ssh, поэтому https).Двойная проверка перенаправлений использует https.