У меня проблема с переменными сеансов. С тех пор, как я переключился с MySQL на PDO. С mysqli все работало нормально, но с тех пор, как я перешел на PDO, эта проблема появилась.
Я пытаюсь войти в систему, и у меня есть область, где я хочу убедиться, что пользователь может видеть только, если пользователь вошел в систему. Вход в систему работает нормально, но как только я получаю ссылку на свой индекс файл, я ничего не вижу, потому что вошли в систему функции. Я вижу, что переменная $ _SESSION заполняется, но как только я перенаправляю в другой файл, переменные $ _SESSION исчезают, и я получаю пустой массив:
Array
(
)
process_login.php
require_once('../inc/user.inc.php'); // here i have all my functions
$user = new User(); // New Instance of my User Class
$user -> sec_session(); // selfmade session function. I use start_session() in this function
if (isset($_POST['email'], $_POST['p'])) {
$email = filter_var($_POST['email'], FILTER_SANITIZE_STRING);
$password = filter_var ($_POST['p'], FILTER_SANITIZE_STRING);
$login = $user -> login_user($email, $password);
if ($login) {
// Login sucessful
//print("".print_r($_SESSION,true)."
"); // Здесь я распечатал переменную $ _SESSION, и она работает. Я вижу, что она заполнена.
заголовок ('Location: ../index.php');
выход();
}
index.php
<?php
$title = 'Index';
$currentPage = 'Dashboard';
include('php/head.php');
require_once('../inc/user.inc.php');
$user = new User();
$user -> sec_session(); // here i call my session function again. Note: session_start() is included in this function
print("".print_r($_SESSION,true)."
"); // Теперь массив пуст?!?
?>
user.inc.php - функция sec_session
protected function sec_session() {
$session_name = 'sec_session_id';
$secure = SECURE;
$httponly = true;
if (ini_set('session.use_only_cookies', 1) === FALSE) {
header("Location: ../error.php?err=Could not initiate a safe session (ini_set)");
exit();
}
$cookieParams = session_get_cookie_params();
session_set_cookie_params($cookieParams["lifetime"],
$cookieParams["path"],
$cookieParams["domain"],
$secure,
$httponly);
session_name($session_name);
session_start();
session_regenerate_id();
}
При входе в систему я установил для сеанса следующее в моей функции входа в систему:
if ($db_password == $password) {
$user_browser = $_SERVER['HTTP_USER_AGENT'];
$user_id = preg_replace("/[^0-9]+/", "", $user_id);
$_SESSION['user_id'] = $user_id;
$username = preg_replace("/[^a-zA-Z0-9_\-]+/",
"",
$username);
$_SESSION['username'] = $username;
$_SESSION['login_string'] = hash('sha512',
$password . $user_browser);
return true;
}
Все вышеперечисленное прекрасно работает, но исчезает, только когда я захожу в свой index.php и знаю, что что-то беспокоит, но я понятия не имею, что это такое.