PHP session_name (): невозможно изменить имя сеанса, когда сеанс активен. Ошибка - PullRequest
0 голосов
/ 02 апреля 2020

Я получаю неожиданные ошибки в коде, который работает уже несколько недель. Я не изменил этот код, но при входе в систему я получаю две ошибки.

session_name (): невозможно изменить имя сеанса, когда сеанс активен в / opt / lampp / htdocs / FantasyKicks / index . php в строке 5

session_start (): сеанс уже запущен - игнорируется в /opt/lampp/htdocs/FantasyKicks/index.php в строке 7

Я попытался запустить session_destroy (), чтобы вернуть меня на страницу входа в систему и удалить сеанс, а затем удалить эту строку и снова войти в систему, но обе ошибки все равно появляются. Мне интересно, есть ли на самом деле проблема с тем, как я закодировал процесс входа в систему или нет.

login. php (я вынул некоторый нерелевантный код на этом стр.)

session_name('FantasyKicks');

session_start();

if(!$email & !$password) {
        echo "All fields required";
    } else {
        if(!$email) {
            echo "Email required";
        } else {
            if(!$password) {
                echo "Password required";
            } else {
                if($num == 0) {
                    echo "Incorrect email or password";
                } else {
                    // User is logged in
                    echo "LoggedIn";
                    $_SESSION['UserID'] = $user['UserID'];
                    $_SESSION['Email'] = $user['Email'];
                    $_SESSION['FirstName'] = $user['FirstName'];
                    $_SESSION['LastName'] = $user['LastName'];
                    $_SESSION['logged_in'] = true;
                }
            }
        }
    }

index. php (начало индекса. php)

require 'fkdb.php'; // Connect to database which uses XML config file

session_name('FantasyKicks');

session_start();
if (!isset($_SESSION['logged_in'])) {
   $_SESSION['logged_in'] = false;
};

1 Ответ

0 голосов
/ 02 апреля 2020

Вы чрезмерно вызываете методы сеанса, вы должны использовать session_start(); только один раз в верхней части вашего кода в контроллере. Если вам действительно нужно проверить, запущен ли сеанс, вы можете использовать приведенный ниже код, но лучше всего вызывать его один раз. ваша php конфигурация. В php .ini найдите следующую строку и установите для нее значение false:

session.auto_start = false

Что касается имени сеанса, то это просто имя файла cookie; session_name(); функционально эквивалентен ini_get('session.name');, поэтому, если вы не захотите изменить конфигурацию php, я не понимаю, почему вы захотите вызвать этот метод. Я бы оставил значение по умолчанию «PHPSESSID», поскольку это облегчает отладку.

...