|
|
|
| Люди, всем привет!
Интересует вопрос: неужели невозможно в сессионных переменных хранить массивы с даннвми? Ситуевина была такая: с одной страницы на другую сессионный массив сохранил мне эти данные, т.е. вывел в названии страницы статус пользователя:
Статус - менеджер
Страница состоит из фреймов, и когда я перехожу по ссылкам внутри фреймсета, не обновляя его, всё так и сохраняется. Но стоит мне нажать 'Refresh', т.е. обновить именно сам фреймсет, в названии страницы выводится лишь:
Статус -
- со всеми вытекающими, ибо по этому статусу должны права распределяться... в чем тут может быть лажа?? | |
|
|
|
|
|
|
|
для: Anwor
(07.05.2006 в 11:58)
| | Можно хранить мохно но так
$_POSt['array'][] =
так вроде, тоесть мы делаем двухмерный массив | |
|
|
|
|
|
|
|
для: CrazyAngel
(07.05.2006 в 12:06)
| | Дык ну нет, ну я так, получается, и делаю (только там $_SESSION, а не $_POST), но при обновлении страницы все индивидуальные переменные типа $_SESSION['user'], которая должна хранить имя пользователя, - сохраняются, а вот массивные вроде $_SESSION['status'] (по сути, она и есть массив) - пропадают безвести. Суть в том, что у 1 пользователя может быть несколько статусов, и поэтому тут без массива не обойтись. | |
|
|
|
|
|
|
|
для: Anwor
(07.05.2006 в 12:24)
| | А вы как присваиваете массив $_SESSION['user']? и что даёт распечатка дампа массива
<?php
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
?>
|
| |
|
|
|
|
|
|
|
для: Anwor
(07.05.2006 в 11:58)
| | А в чем проблема?
for ($i=0; $i<10; $i++)
{
$_SESSION['status'][$i] = $i; // заносим число в массив
}
|
хотя foreach было бы сдесь уместнее... | |
|
|
|
|
|
|
|
для: Anwor
(07.05.2006 в 11:58)
| | Проще запаковать массив:
<?php
$_SESSION['status'] = serialize($status);
?>
|
Массив запакуется в строку. Чтобы распаковать эту строку обратно в массив:
<?php
$status = unserialize($_SESSION['status']);
?>
|
| |
|
|
|
|
|
|
|
для: Саня
(07.05.2006 в 13:37)
| | Спасибо, но только я говорю: проблема не в том....
Заноситься - всё заносится, но вот в чем дело: он считывает данные из этих массивов ($_SESSION['status'] и $_SESSION['grants']) только лишь до первого рефреша! После нажатия "Обновить страницу" распечатка набора всех необходимых переменных дает следующие результаты:
немассивные переменные остаются в деле и распечатываются
$_SESSION['user']
$_SESSION['login']
а вот массивные теряют данные!
$_SESSION['status'][ ]
$_SESSION['grants'][ ]
Возможно, метод serialize поможет... я попробую.. т.е. в Вашем примере:
$status - массив
$_SESSION['status'] - строка?
хотя хотелось бы обойтись без serialize.. много лишних неудобств | |
|
|
|
|
|
|
|
для: Anwor
(07.05.2006 в 15:01)
| | Возможно, метод serialize поможет... я попробую.. т.е. в Вашем примере:
$status - массив
$_SESSION['status'] - строка?
Да.
много лишних неудобств
Нет. serialize() - самая удобная функция для работы с массивами.
Например, есть массив:
Array
(
[1] => Some text
[status] => 20
[name] => admin
)
|
Запакую его в строку:
<?php
$a = array(1 => "Some text", "status" => 20, "name" => "admin");
$str = serialize($a);
print($str);
?>
|
На экран выведется строка:
a:3:{i:1;s:9:"Some text";s:6:"status";i:20;s:4:"name";s:5:"admin";}
|
С этой строкой моожно делать всё, что заблагорассудится! Пихать в массив, в файл, в БД без боязни, что нарушится структура запакованного массива.
Распаковать строку нужно так:
<?php
$str = 'a:3:{i:1;s:9:"Some text";s:6:"status";i:20;s:4:"name";s:5:"admin";}';
$a = unserialize($str);
print_r($a);
?>
|
В результате выполнения этого скрипта выведется:
Array
(
[1] => Some text
[status] => 20
[name] => admin
)
|
А это то же самое, что и в начале!
serialize()/unserialize() - это самое то, что вам нужно! | |
|
|
|
|
|
|
|
для: Саня
(07.05.2006 в 15:11)
| | Я попробовал использовать этот метод, он действительно незаменим для отдельных случаев, однако в моей ситуации и он не помогает!
Зато я обнаружил еще более интересный финт!
Я уже говорил: страница, на которую мы переходим после внесения сессионных переменных, стоит на фрэймсете. Фрэймсет делит страницу на 2 области, верхняя из которых отображает все статусные данные (как раз из сессионных переменных) и служит менюшкой для нижнего фрейма.
Так вот.
Если мы возьмем свежезагруженную страницу с пустым низом, т.е. не нажимая на какие-л. ссылки, и нажмем по "Обновить", то всё остается на своих местах. Однако же стоит нам лишь раз щелкнуть по 1 из ссылок, а потом обновить страницу, - массивные переменные умирают!! Даже представленные в виде строки с помощью serialize! В чем же дело????! | |
|
|
|
|
|
|
|
для: Anwor
(07.05.2006 в 23:34)
| | Оййй!! Извиняюсь, я понял.... там дело вообще не в этом. Дело совсем в другом модуле, где на каждую новую загрузку страницы прописан unset всех переменных кроме $_SESSION['user'] и $_SESSION['login']! Вот почему они оставались!
Всем спасибо за помощь! | |
|
|
|