Установка $ _SESSION не работает на localhost с помощью XAMPP

Я установил свой сеанс так в моем PHP-коде: $_SESSION['user_id'] = $login; и это, кажется, отлично работает, пока загружается на мой сервер и переносится на разные страницы, однако, когда я тестирую сайт на своей локальной машине, сеанс кажется немедленно отключенным после выхода из сценария, где он установлен.

Я тестирую свою локальную машину с помощью XAMPP и точно такого же кода.

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

Пример, который не работает:

 $_SESSION['user_id'] = $login; echo '<META HTTP-EQUIV="refresh" content="0;URL=../home.php">'; 

ИЗМЕНИТЬ 1:

Вот моя вся функция, в которую я вхожу (она входит в класс):

 public function loggingIn(){ session_start(); $db = new Database('localhost','root','','userdata'); $userFunctions = new Users($db); $username = $_POST['usernameInput']; $password = $_POST['passwordInput']; if(empty($username) || empty($password)){ $this->errors['u&p'] = 'Please Enter Your Username AND Password'; $this->printE(); } elseif($userFunctions->user_exists($username)===false){ $this->errors['nm'] = 'That Username/Password Combination Is Not Valid'; $this->printE(); } else { $login = $userFunctions->login($username, $password); if($login === false){ $this->errors['nm'] = 'That Username/Password Combination Is Not Valid'; echo 'Login Failed!'; } else { if(!$userFunctions->economyTableExistsForUser($login)){ $userFunctions->createEconomyTableForUser($login); } if(!$userFunctions->schoolTableExistsForUser($login)) { $userFunctions->createSchoolTableForUser($login); } $_SESSION['user_id'] = $login; echo $_SESSION['user_id']; // working fine header('Location: ../home.php'); } } } 

Related of "Установка $ _SESSION не работает на localhost с помощью XAMPP"

Предположим, что у вашей домашней машины нет:

session.autostart = On

в вашем php.ini , в то время как ваша другая машина, очевидно, есть.

Убедитесь, что вы установили в своем PHP-коде:

session_start();

PHP: session_start – Руководство

Если вы этого не сделаете, ваша сессия не будет запущена, если моя первая гипотеза не верна.

Кроме того, вы должны проверить версию PHP на своем локальном хосте и настройках в php.ini . Убедитесь, что каталог, в котором хранятся файлы сеанса, можно записывать, а файлы сеансов действительно существуют.

ИЗМЕНИТЬ 1:

Вам лучше использовать PHP-решение для перенаправления:

 header("Location: /"); exit(); 

EDIT 2:

PHP имеет функции, которые изменяют заголовки HTTP. Некоторые из них:

  • заголовок
  • session_start
  • SetCookie

ИЗМЕНИТЬ 3:

Линейные разрывы и пробелы могут быть проблемой, но есть также невидимые последовательности символов, которые могут вызвать Warning: Cannot modify header information , например, спецификацию UTF-8 (знак байта-ордера) . Попробуйте повторно сохранить файл, убедившись, что он сохранен как UTF-8 (no BOM) .

EDIT 4:

Чтобы правильно отладить ваш код, убедитесь, что PHP отображает все предупреждения и уведомления. Запустите его до начала сеанса:

 ini_set('display_errors', -1); 

EDIT 5:

Вы также должны проверить настройку session.gc_maxlifetime :

session.gc_maxlifetime
session.gc_maxlifetime указывает количество секунд, после которых данные будут рассматриваться как «мусор» и очищены. Сбор мусора происходит во время начала сеанса.

EDIT 6:

Чтобы просмотреть пробелы в Sublime Text, отредактируйте настройки:

 // Set to "none" to turn off drawing white space, "selection" to draw only the // white space within the selection, and "all" to draw all white space "draw_white_space": "selection", 

Вы можете установить его в настройках-> Настройки по умолчанию. Если вы отредактируете свои пользовательские настройки «Настройки» – «Настройки» – «Пользователь» и добавьте строку, как показано ниже:

 { "font_size": 10, "draw_white_space": "all" } 

Также убедитесь, что он показывает всем другим специальным символам, чтобы правильно отлаживать ваш код!

EDIT 7:

Наконец, попробуйте добавить session_write_close(); прямо перед перенаправлением.

EDIT 8:

Установите в своем PHP-файле до session_start(); , session.save_path = "/home/username/tmp"; директивы. Создайте tmp dir вне public_html . Убедитесь, что tmp dir имеет chmod 770 и создан с теми же привилегиями пользователя и группы. Запустите ls -lsa в домашнем каталоге, чтобы проверить, имеет ли новый каталог тот же пользователь / группу, что и другие каталоги, например public_html . Если нет, убедитесь, что вы изменяете разрешения с правами root на tmp , запустив chown username:groupname /home/username/tmp .

Быстрое обновление по этому вопросу. Я нашел этот ответ очень полезным, однако, обратите внимание, что при установке XAMPP запись php.ini для session.autostart = On немного отличается. Я нашел следующее:

; Инициализировать сеанс при запуске запроса. ; http://php.net/session.auto-start session.auto_start = 0

Я изменил это на:

; Инициализировать сеанс при запуске запроса. ; http://php.net/session.auto-start session.auto_start = 1

Убедитесь, что файлы cookie сеансов включены в php.ini ( xamp\php\php.ini ).

 session.use_cookies=1 

В вашей проверке php.ini:

  1. variables_order содержит букву S
  2. Убедитесь, что session.save_path существует и доступен для записи пользователем, под которым работает PHP.

Если вы используете PHP, встроенный в документы .htm / .html, вам необходимо убедиться, что Apache может их обработать соответствующим образом. Это делается путем редактирования httpd.conf и добавления строки

 AddType application/x-httpd-php .html .htm 

в раздел <IfModule mime_module>

Я боролся с этой проблемой, но решил …

В /opt/lampp/etc/php.ini попробуйте изменить эту строку:

 session.save_path = "/var/lib/php/session" 

Для этого:

 session.save_path = "/opt/lampp/var/session" 

Примечание. Возможно, вам нужно создать папку «session» в /opt/lampp/var

 Session Issue Fixed in Xampp 7.1.6 with following Changes in php.ini Line #1403 set: session.auto_start = 1 

Включить файлы cookie сеанса в php.ini (C: \ xamp \ php \ php.ini).

ИЗМЕНЕНИЕ

 session.use_cookies=0 

К

 session.use_cookies=1 

И не забудьте перезапустить xampp