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

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

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

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

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

11
задан Cœur 16 April 2017 в 03:45
поделиться

5 ответов

У вас есть session_start(); в верхней части?

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

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

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

0
ответ дан 3 December 2019 в 06:20
поделиться

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

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

4
ответ дан 3 December 2019 в 06:20
поделиться

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

Единственная причина для меня в том, что $ _SESSION ['userID'] где-то перезаписывается или удаляется.

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

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

0
ответ дан 3 December 2019 в 06:20
поделиться

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

0
ответ дан 3 December 2019 в 06:20
поделиться

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

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

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

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

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

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

0
ответ дан 3 December 2019 в 06:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: