Переменная сеанса уничтожается после перехода на живой сайт - PullRequest
0 голосов
/ 10 марта 2019

Я только что перенес свой веб-сайт со своего локального сервера WAMP на работающий HTTPS-сервер 1and1.Он отлично работает на локальном сервере, но на работающем сервере сессионные переменные уничтожаются, когда я пытаюсь войти в систему. Я знаю, что база данных работает нормально и все запросы успешно выполняются после некоторого тестирования.

Проблема в том, что переменная сеанса создается, когда я запускаю сценарий входа в систему, но как только страница перезагружается и выполняет «проверку сеанса», переменная больше не существует.Из-за этого сайт просто перезагружает форму входа в систему, если условие if не выполняется.

Вот код для обоих сценариев.Я не знаю, почему это происходит, поскольку весь веб-сайт работает через HTTPS, поэтому это не проблема с HTTP / HTTPS и т. Д.

СКРИПТ ВХОДА

<?php

date_default_timezone_set("Europe/London");
require("db_connect.php");

if ($sql)
{
    $email = $_POST['userEmail'];
    $password = $_POST['userPassword'];

    $checkDetails = mysqli_query($sql, "SELECT * FROM users WHERE email='$email'");

    while ($details = mysqli_fetch_array($checkDetails))
    {
        $hashedPassword = $details['password'];

        if(password_verify($password, $hashedPassword))
        {
            //Passwords Match

            //Update last login time in the database
            $now = date("Y-m-d H:i:s");
            $lastLoginQuery = mysqli_query($sql, "UPDATE users SET lastLogin='$now' WHERE email='$email'");

            if ($lastLoginQuery)
            {
                //Initialise session
                session_start();
                $_SESSION['user'] = $email;
                header("Location: ../");
            }
            else
            {
              echo "There was an error logging you in. Please try again!";
            }
        }
        else
        {
            echo "The details you entered are incorrect. Please return to the login page. If the problem persists, contact an administrator.";
        }
    }
}
else
{
    echo "There was a problem connecting to the database";
}

?>

Сценарий проверки сессии

<?php

//Check if a session exists and load the page if it does

session_start();

if (isset($_SESSION['user']))
{
    //Check if the session has timed out
    if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800))
    {
        //Last user action performed more than 30 minutes ago. Log out now.
        session_unset();
        session_destroy();
        header("Location:./");
    }

    //If the session hasnt timed out. Reset the last activity time.
    $_SESSION['LAST_ACTIVITY'] = time();

    //Continue to load content
    include('./includes/main.php');
}
else
{
    //  Load login page
    include('./includes/login_form.php');
}

?>

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Исправлена ​​проблема с добавлением дополнительного session_start (); непосредственно в начале файла index.php перед любым HTML. Кажется странным, что сценарии login и session_check не будут работать без этого, поскольку у них также есть session_start (); в них тоже.

0 голосов
/ 10 марта 2019

Начало сеанса должно быть самым первым вызовом в вашем скрипте.https://www.w3schools.com/php/php_sessions.asp

 <?php
   session_start();

   date_default_timezone_set("Europe/London");
    require("db_connect.php");

и т.д ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...