Я прочитал руководство по 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 иногда имеют разные пути сеанса)
Я не слышал об этой проблеме, но я не очень хорошо использовал сеансы.
С сессиями вы ДОЛЖНЫ сделать несколько вещей и настроить несколько настроек:
Другой проблемой может быть идентификатор $ 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)
чтобы увидеть ошибки.