Переменная сеанса php потеряна между страницами с отправкой формы

Мне было интересно, может ли кто-нибудь помочь мне.

Если я нахожусь на странице details.php (код ниже), есть форма с кнопкой отправки (среди прочего).

При нажатии кнопки отправки формы вы попадаете на страницу process_tenant.php.

Проблема в том, что переменная сеанса valid_user, похоже, не идет с ней. У меня есть session_start() в начале обеих страниц, и переменная сеанса определенно установлена ​​​​и никогда не перезаписывается в файле details.php.

Кто-нибудь может сказать мне, почему?

details.php

<?php
session_start();

    $_SESSION['valid_user'] = 'admin';

    echo $_SESSION['valid_user'];       //This prints out admin 
?>

<!DOCTYPE HTML>
<html>
<head>
        ...
    </head>

    <body>
        ...

        <form action='process_tenant.php' method='POST'>
            ...
        </form>
    </body>
</html>

process_tenant.php

<?php
   session_start();

   if (isset($_SESSION['valid_user']))
   {
       echo 'heya';          //This does not print
   }

   echo 'hi' . $_SESSION['valid_user'];    //This just prints 'hi'
?>

...

person Pippa Rose Smith    schedule 18.07.2012    source источник
comment
Вы уничтожили сеанс с помощью session_destroy();   -  person phphunger    schedule 18.07.2012
comment
Нет, нигде. Мне было интересно, может ли это быть проблемой конфигурации php? Поскольку с кодом, кажется, нет ничего плохого.   -  person Pippa Rose Smith    schedule 20.07.2012
comment
Решил проблему спасибо. Я не уничтожал сеанс, но я перезаписывал valid_user с помощью   -  person Pippa Rose Smith    schedule 20.07.2012


Ответы (3)


Конфиг.php

<?php
ob_start();
session_start();
$_SESSION['valid_user'] = admin;
?>

Детали.php

<?php
include('Config.php');
?>

process_tenant.php

<?php
include('Config.php');

if (isset($_SESSION['valid_user']))
{
     echo 'heya';
}
echo 'hi' . $_SESSION['valid_user'];
?>
person Dhruvisha    schedule 18.07.2012
comment
Спасибо, но добавление ob_start(), похоже, не имеет значения. - person Pippa Rose Smith; 18.07.2012
comment
Это не имеет значения. Это просто тот же код, написанный в другом файле. - person Pippa Rose Smith; 18.07.2012
comment
Вы где-то уничтожили сеанс? - person Dhruvisha; 18.07.2012
comment
Я нигде не уничтожал сессию - person Pippa Rose Smith; 18.07.2012
comment
почему этот ответ был принят? что решило эту проблему? - person proPhet; 18.11.2014

В details.php значение admin ничему не соответствует. Это должна быть либо переменная, либо строка, либо какой-либо допустимый тип, иначе он будет сброшен.

Попробуйте изменить свой код на это:

$_SESSION['valid_user'] = 'admin';
person davidethell    schedule 18.07.2012
comment
На самом деле он получает значение из базы данных, но для простоты я просто поставил = admin. Но да, я забыл '' в своем вопросе. Спасибо - person Pippa Rose Smith; 18.07.2012

запустите только один раз, т.е. используйте session_start() только один раз, удалите из process_tenant.php и дайте мне знать, когда закончите.

person swapnesh    schedule 18.07.2012
comment
session_start() нужно вызывать один раз для каждого вызова PHP. Поскольку он не включает файл details.php в файл process_tenant.php, ему нужно будет вызвать session_start(). - person davidethell; 18.07.2012
comment
Если вы не включаете session_start() вверху обеих страниц, это выдает серьезную ошибку. Вам определенно нужен session_start(). - person Pippa Rose Smith; 18.07.2012