Вопрос:
Я создаю очень простую PHP-платформу для складирования, но довольно сложный внутренний процесс.
Итак, вот ситуация:
-
У меня есть страница входа, которая направляет на страницу авторизации, где установить session_name впервые, session_start() и установите переменные сессии.
-
После страницы авторизации она переходит на страницу main.php, которая представляет собой таблицу с левой стороны для меню (ссылок), в которой я также сделал session_name() <- то же имя, что и созданное из (1), и запустите сессия.
-
В правой части главной страницы находится iframe, отображающий страницу, когда пользователь нажимает ссылки слева. Я также сделал session_name() <- то же имя, что и созданное из (1), и запустил сеанс.
Проблема:
main.php в порядке, он отлично читает переменную сеанса, но iframe не может получить переменные сеанса (я попытался print_r($_SESSION) и вышел пустым). Я попробовал var_dump(session_name(«abc»)), где “abc” – это имя сеанса, которое я использовал в (1), и оно показывает “abc”, isset($_SESSION)) и возвращает true… поэтому я не знаю, что я делаю неправильно…
EDIT: Мне жаль, ребята, я думаю, что я нашел преступника… это логическая ошибка на моей стороне… У меня есть это условие, чтобы проверить каждую страницу php, созданную мной для уничтожения сеанса, когда пользовательский уровень не разрешен для использования этой текущей страницы. Мой плохой.. Большое спасибо за помощь!
Лучший ответ:
Убедитесь, что session_start() находится на всех страницах:
session_start() создает сеанс или возобновляет текущий на основе идентификатора сеанса, переданного через запрос GET или POST, или передается через файл cookie.
Чтобы контролировать содержимое $ _SESSION, попробуйте поместить на все страницы ifreame код:
<?php session_start(); echo ‘<pre>’; var_dump($_SESSION); echo ‘</pre>’; Ответ №1
Вы использовали session_start() в верхней части страницы как в iframe так и в main.php? Вам нужно также поставить session_start() в верхней части iframe.
Ответ №2
Это может решить вашу проблему: php session & iframe
Дополнительно: Ничто не просто, если вы используете iframe для отображения больших частей вашего веб-сайта. Возможно, вы захотите не использовать их.
Ответ №3
У меня была такая же проблема с несколькими iframes на одной из моих веб-страниц PHP.
В моем случае некоторые вызовы AJAX для конечных точек PHP делались на www.example.com, когда страница была загружена с помощью http://example.com. Если вы НЕ согласуетесь с пути к домену, у вас могут возникнуть проблемы с сеансом, так как запрос с веб-сайта www.example.com технически является из субдомена, поскольку он противопоставляется непосредственно с http://example.com. Вы можете вообще избежать этой проблемы, всегда используя относительные пути к API на основе PHP при выполнении вызовов AJAX в JavaScript.
Я обнаружил, что это произошло, проверяя мои файлы cookie в Chrome. Я заметил два разных файла cookie с другим идентификатором сессии PHP. Один из них был установлен для www.example.com, а другой был установлен для example.com
Как уже упоминалось в некоторых других ответах, вы всегда можете установить, чтобы домен cookie сеанса работал на всех ваших поддоменах вместе с основным сайтом, используя следующее:
ini_set(«session.cookie_domain», «.domain.com»);
PHP по умолчанию устанавливает новый сеанс для домена/поддомена. Надеюсь это поможет!