PHP: сеанс не сохраняется перед перенаправлением заголовка

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

// session $_SESSION['userID'] = $user->id; header('Location: /subdirectory/index.php'); 

Затем в верхней части index.php после session_start() меня есть var_dumped глобальный $ _SESSION, и идентификатор пользователя там отсутствует. Как я уже сказал, ive просмотрел руководство по PHP ( http://php.net/manual/en/function.session-write-close.php ), и для меня не работало session_write_close или session_regenerate_id(true) . Кто-нибудь знает решение?

Изменить: у меня есть session_start () в верхней части моего файла. Когда я var_dump сеанс глобальный перед перенаправлением заголовка, я вижу идентификатор пользователя там, но не в другом файле, который находится в подкаталоге этого скрипта

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

 $_SESSION['session'] = 'this is a session'; header('location: apage.php'); exit; 

Это работает для меня

@Matt (еще не в состоянии прокомментировать …): Если:
a) Он появляется в сеансе перед перенаправлением
б) работают другие ключи

80% времени проблема register_globals и использование одинаково названной переменной $ userID где-то (остальные 19% просто переписываются в местах, которые не ожидаются, 1% не может записать / заблокировать сеанс до перенаправления и устаревших данных , и в этом случае вы можете попробовать session_write_close () перед перенаправлением). Разумеется, register_globals должен быть выключен: P

У вас есть session_start (); на вершине?

Не проверено, но вы не можете сделать что-то вроде этого:

 session_start(); $_SESSION['userID'] = $user->id; if( $_SESSION['userID'] == $user->id ) { header('Location: /index.php'); } 

У меня никогда не было этой проблемы раньше, интересно

userID не имеет статуса ключевого слова.

Только причина для меня – $ _SESSION ['userID'] где-то переписывается или удаляется.

Убедитесь, что вы используете session-> start () во всех файлах, которые хотите добавить / получить доступ к сеансу.

Одна важная вещь (которая может не применима в вашем случае) заключается в том, что если сеанс обрабатывается с использованием cookie, cookie может быть доступен для доступа только под определенным каталогом и подкаталогами под этим. В любом случае подкаталог будет иметь доступ к сеансу.

Убедитесь, что обе страницы имеют одну и ту же версию php (php5, php4 иногда имеют разные пути сеанса)

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

С сессиями вы ДОЛЖНЫ сделать несколько вещей и настроить несколько настроек:

  • файлы cookie, включенные на стороне клиента
  • session_start (), прежде чем что-нибудь произойдет
  • убедитесь, что вы не уничтожаете сеанс (если они не хотят выйти из системы)
  • Идентификатор сеанса PHP должен быть одинаковым (относится к файлам cookie)

Другой проблемой может быть идентификатор $ user->, возвращающий ссылку на объект, который не существует на следующей странице. Скорее всего, нет, но убедитесь.

Если бы я увидел ваш код, я мог бы помочь вам намного больше. Но при отладке проверьте ключ сеанса с session_id () и убедитесь, что он тот же. Если бы вы могли попробовать, тогда скажите мне, что я могу продолжать помогать.

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

У меня была такая же проблема в последнее время. Я пишу настраиваемый веб-сайт MVC для школы, и, как сказали все, start_session () должен быть написан в самых первых строках кода.

Моя проблема была РАСПОЛОЖЕНИЕ «session_start ()». Это должны быть первые строки вашего глобального контроллера, а не первые строки представления. $ _SESSION недоступна в файлах контроллера, потому что она была инициирована только тогда, когда сервер визуализировал представление.

Затем я использую session_write_close () после вызова заголовка ('location: xxx.php') для сохранения переменных сеанса для следующего запроса.

например:

globalController.php:

 //First line session_start(); require_once('Model/Database.php'); require_once('Model/Shop/Client.php'); ... 

logonController.php:

 ... //Users is validated and redirected. $_SESSION['client'] = $client; header('location: index.php'); session_write_close(); 

Надеюсь, он решил ваши проблемы.

Это было досадно, но я, наконец, понял решение.

config.php у меня: include 'session.php';

В верхней части session.php у меня было: session_start ();

Перемещая session_start () в начало файла config.php, альта …

Задача решена!

Вы должны начать сеанс перед использованием массива сеансов.

PHP Code ,
session_start ();
$ _SESSION ['userID'] = $ user-> id;

header ('Местоположение: /subdirectory/index.php');

Попробуйте дать session_name() перед session_start() .

И переключите error_reporting(15) чтобы увидеть ошибки.