2013-09-02 4 views
1

Я никогда не сталкивался с этим раньше, но по какой-то причине, когда я использую AJAX для установки переменной сеанса, сеанс не будет содержать их.Почему моя сессия не хранит данные?

Вот что у меня есть:

session_start(); 
    if(isset($_POST['selected'])){ 
     $_SESSION['user']['theme'] = array ('selected' => true); 
    } // This should be now set with the value and it is for a time, but unsets 

    if(isset($_POST['theme'])){ 
     $_SESSION['user']['theme'] = array('name' => $_POST['theme']); 
    } // So should this 

Что я вижу, когда я делаю print_r под обоими if конструктов лишь $_SESSION['user']['theme']['name'] вар, а другой не установлен. Если я сделаю print_r только под selected var, я могу это увидеть просто отлично. Где-то ключ и стоимость исчезают для selected.

Почему это происходит? Я ожидаю увидеть как name, так и selected.

+2

Вы каждый раз переопределяете массив? $ _SESSION ['user'] ['theme'] ['name'] = "whatever"; –

+0

Да, полагаю, я. Как я могу написать это так, что под пользовательской темой у меня есть имя и выбор? – NaN

ответ

2

Как я уже сказал в своем комментарии, вы переопределяете массив :)

session_start(); 
//changed it to unset if not in $_POST 
$_SESSION['user']['theme']['selected'] = isset($_POST['selected']); 


if(isset($_POST['theme'])){ 
     $_SESSION['user']['theme']['name'] = $_POST['theme']; 
    } // and unset it too 
else { 
    $_SESSION['user']['theme']['name']= ""; 
} 
+0

Хорошо .. Я изначально написал это так, но я получал ошибки смещения. – NaN

+0

Это приведет к предупреждению, поскольку вы одновременно генерируете ключ и переменную, вы можете префикс переменной, чтобы подавить предупреждение, когда вы счастливы в этом. например $ _SESSION ['user'] ['theme'] ['name'] = @ $ _ POST ['theme']; –

+0

Спасибо. Мне действительно не нравится подавлять ошибки. Как я правильно написал бы это, чтобы это не ошибка? – NaN

1

Вы должны начать session первого

session_start(); 
if(isset($_POST['selected'])){ 
     $_SESSION['user']['theme'] = array ('selected' => true); 
} 

А также проверить, соответствует ли $_POST значение not empty й вам необходимо сбросить имя в сессии затем назначить его как

if(isset($_POST['theme'])){ 
    unset($_SESSION['user']['theme']['name']); 

    $_SESSION['user']['theme'] = array('name' => $_POST['theme']); 
} 
+0

Я должен был упомянуть об этом и сделал исправление, но оно уже начато. – NaN

+0

А также проверьте, не являются ли значения $ _POST пустыми. – Gautam3164

+0

Проблема в том, что я переписываю свой массив. Мне нужно переписать его. Мне просто нужно выяснить, как это сделать. – NaN

0

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

Смежные вопросы