Переменные PHP $ -SESSION исчезают на новой странице и возвращают пустые - PullRequest
1 голос
/ 24 мая 2019

У меня проблема с переменными сеансов. С тех пор, как я переключился с 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 и знаю, что что-то беспокоит, но я понятия не имею, что это такое.

1 Ответ

0 голосов
/ 29 мая 2019

Вы используете http или https для доступа к своему локальному сайту? Если вы используете безопасные куки, PHP не будет читать их под http, вместо этого он начинает новый сеанс с новым куки, переключение на https решает эту проблему.

Из вашей функции sec_session видно, что вы используете безопасные файлы cookie ($ secure = SECURE;), поэтому ваш браузер использует HTTPS? Если вы используете HTTP с безопасными cookie-файлами, вы начнете новый сеанс на каждой странице и не будете иметь доступа к существующим переменным сеанса.

Лучшее решение - получить доступ к вашему локальному сайту с помощью https, как если бы вы работали с живым сайтом, но если вы отключите настройку безопасных файлов cookie для своего локального сайта, это тоже будет работать.

...