Я пишу систему входа пользователя, и я (как и многие другие) испытываю проблемы с моими сеансами.
Вот указатель из сценария входа, когда входы проверяются:
session_start(); $_SESSION['id']=$id; header('location: memberhome.php');
Вот первая вещь на memberhome.php:
<?php session_start(); $id=$_SESSION['id']; ?>
И позже в memberhome.php:
You are logged in as: <?php echo $id; ?>
Проблема заключается в $ _SESSION ['id'], по-видимому, пустой, поэтому echo $ id ничего не печатает.
Альтернативный вариант, который также НЕ работает:
//removed session_start and $_SESSION bit from the top You are logged in as: <?php session_start(); echo $_SESSION['id']; ?>
ТЕПЕРЬ, вот странная часть. Этот метод работает:
You are logged in as: <?php echo session_start();$_SESSION['id']; ?>
Вы можете видеть, что session_start () перемещается ПОСЛЕ эхо. Это работает, когда страница загружается из сценария входа. Однако, после обновления, он НЕ работает еще раз.
Я попробовал кучу альтернатив и провел несколько часов, чтобы найти ответы на предыдущие вопросы. Я также посмотрел на свой phpinfo () на что-то подозрительное и ничего не нашел. Это полностью зависит от моего прогресса. Благодаря!
Прежде всего, включите отладку:
error_reporting(E_ALL); ini_set('display_errors', '1');
Во-вторых, session_start () должен находиться в верхней части страницы. Так что вы написали;
You are logged in as: <?php echo session_start();$_SESSION['id']; ?>
никогда не будет работать.
Следующая строка должна быть в верхней части страницы, перед любым HTML и т. Д.
<?php session_start(); $id=$_SESSION['id']; ?>
Ты пробовал:
print_r($_SESSION);
изучить содержание сессии?
Убедитесь, что вы вызываете session_start()
прежде чем вы выводите что-либо на странице. Стандартные сеансы на основе файлов cookie требуют обмена информацией заголовка, которая должна быть выполнена до отправки любого содержимого.
Скорее всего, вы работаете с выходной буферизацией, поэтому она иногда работает, а иногда – нет. Вообще говоря, придерживайтесь начала сеанса перед созданием любого выхода, вы обнаружите, что ваш код работает лучше.
использование
ob_start (); @session_start ();
в верхней части обеих страниц