У меня есть сценарий входа в систему, закодированный в php и mysqli. при отправке и успешной аутентификации он перенаправляет на success.php для записи сеансов. моя страница успеха выглядит так.
<?php /** * Set cookies here if/as needed. * Set session data as needed. DO NOT store user's password in * cookies or sessions! * Redirect the user if/as required. */ $id = $_GET['id']; $_SESSION['partner_id'] = $id; $_SESSION['authenticated'] = TRUE; if (isset($_SESSION['partner_id'])) { echo("<script> <!-- location.replace(index.php); --> </script>"); } else { print "Session partner id not set"; } ?>
Эта страница эффективно перенаправляется на мою страницу index.php. Однако мой индекс php не распознает переменную сеанса.
<?php session_start(); // rest of code print "ths is the session var".$_SESSION['partner_id']; ?>
который находится в верхней части страницы перед объявлением doctype.
на странице у меня тоже есть
<?php if(isset($_SESSION['partner_id'])) { print "This is the session id variable".$_SESSION['partner_id']; } else { print "Session not set"; } ?>
Верхняя проверка печатает пустую и нижний печатает сеанс не установлен ….
Я запутался…
Вам нужно session_start () на всех страницах, используя $ _SESSION
<?php /** * Set cookies here if/as needed. * Set session data as needed. DO NOT store user's password in * cookies or sessions! * Redirect the user if/as required. */ session_start(); $id = $_GET['id']; $_SESSION['partner_id'] = $id; $_SESSION['authenticated'] = TRUE;
Также … вы уверены, что $ _GET ['id'] имеет значение в нем?
И … это ваша форма, использующая POST или GET ?
Ive сделал эту глупую ошибку раньше, где форма использовала POST, и я возвращал переменную с GET и расстраивался. Просто возможность
Используйте session_start (); внутри всей страницы перед использованием переменной $ _SESSION в PHP. session_start (); функция используется для инициализации сеанса.
ваш success.php должен быть.
<?php /** * Set cookies here if/as needed. * Set session data as needed. DO NOT store user's password in * cookies or sessions! * Redirect the user if/as required. */ session_start(); $id = $_GET['id']; $_SESSION['partner_id'] = $id; $_SESSION['authenticated'] = TRUE; if (isset($_SESSION['partner_id'])) { echo("<script> <!-- location.replace(index.php); --> </script>"); } else { print "Session partner id not set"; } ?>
Исходный файл не содержал session_start (), как указано. однако теперь он работает без него по какой-то причине.
Я думаю, что проблема с кэшем или сервером
Добавление к ответам. Если вы не хотите писать session_start () при запуске каждой страницы, вы можете просто пропустить его, установив session.auto_start = 1
в файле php.ini, который автоматически запускает сеанс по запросу стр. См. Документацию по настройке сеанса PHP.