PHP $_SESSION пуст после перенаправления заголовка

Я теряю данные в $_SESSION при перенаправлении заголовка. Когда я прохожу через это с помощью отладчика, я вижу все свои данные в $_SESSION перед выходом();

Логин.php:

...

if($result == 1){       
    header("Location: /myaccount.php");
    session_write_close();
    exit();
} else {
    header("Location: /login.php?invalid=yes");
    exit();
} 

Затем я ставлю точку останова после условия session_start() ниже, а $_SESSION полностью пуста.

myaccount.php:

<?php
if(!isset($_SESSION['user_id'])) { session_start(); }

$docRoot = getenv("DOCUMENT_ROOT");
...

Куда делся мой сеанс?


person doub1ejack    schedule 21.02.2011    source источник


Ответы (3)


Убедитесь, что вы используете функцию session_start(); перед оператором if на myaccount.php

person Michiel Pater    schedule 21.02.2011
comment
Ну, это была своего рода проблема. Я использую это условное выражение на каждой странице, чтобы не пытаться вызывать session_start() несколько раз. В сеансе всегда есть идентификатор пользователя, так что тест работает нормально ... до тех пор, пока я ввожу его правильно. На самом деле это «userid». Глупая ошибка. Есть ли способ просто удалить этот бесполезный пост? - person doub1ejack; 21.02.2011
comment
@sing1ejack: не удаляйте пост, он может быть полезен тем, кто сталкивается с той же проблемой. Я был рад увидеть ваш пост, но я подумал, что это немного сложнее, чем забыть о session_start();. :D В моем случае это также не работает после перенаправления заголовка, но я вызываю session_start() каждый раз, когда хочу использовать переменные $_SESSION, я устанавливаю одну в файле ($_SESSION['message'] = 'blahblah' ;), а при перенаправлении на другой файл с помощью header() массив $_SESSION пуст. Я также перенаправил путь сохранения сеанса в другой каталог, в котором я вижу сообщение «blahblah» в текстовом редакторе... - person Sk8erPeter; 21.07.2011

Вы должны вызывать session_start() на каждой странице, обращающейся (т. е. читающей или записывающей) $_SESSION, и вызывать ее перед любым доступом к массиву сеанса. Итак, убедитесь, что вы вызываете session_start() на обеих страницах.

person Carlos Campderrós    schedule 21.02.2011

Да, не удаляйте пост ... У меня была ТОЧНО такая же проблема, и этот пост заставил меня невольно сильно ударить ладонью по лбу. И это устранило проблему (то есть с моим кодом, а не с моей тупостью). Ваше здоровье!

person brett    schedule 04.10.2013