Как засунуть массив в сессию?

Gride

Новичок
Как засунуть массив в сессию?

Всем привет,

Недавно на этом форуме была очень интересная и познавательная тема, касающаяся проверки рефереров при обработке формы. Окромя проверки рефереров был подсказан другой вариант, предположительно более надежный:
При генерации формы в хидден вставляется рандомное число. Оно же сразу пишется в сессию. При обработке формы число из хиддена сверяется с числом из сесси, и если такое число есть, то продолжить обработку формы, иначе hacker? he-he.
Но при попытке сделать в скрипте
$rand = mt_rand();
$_SESSION["control"][] = $rand;
или чего-нить в этом же роде, получаю ворнинг:

Warning: Cannot use a scalar value as an array in D:\Internet\icegroup\forum\newpost.php on line 153

print_r($_SESSION) выводит $_SESSION["control"] = 12345.
При попытке сделать $_SESSION["control"]["рандомная строка"] = 1; выводится тот же ворнинг.

Что такое scalar? Почему сессия не хавает двумерный массив?

Использовать $_SESSION["control"] = $rand, т.е. хранить в сессии только одно рандомное число, не подходит, т.к. тогда в форуме пользователь сможет заполнять только одну форму на отправку сообщения.

В качестве возможного варианта решения видится сериализация:
В $_SESSION["control"] хранить засериализованный массив с этими самыми рандомными числами.
При генерации новой формы десериализовывать переменную, добавлять новое число и засериализовать ее обратно.

Существуют ли другие решения? Попроще, покрасивше, поаккуратней...
 

Фанат

oncle terrible
Команда форума
предположительно более надежный:
возможно, тема и была интересной, но вот весь смысл ее обошел тебя стороной...
об этом напиасано в документации.
Вообще-то, типы данных - это ОСНОВА языка.
И как можно хоть строчку написать не знаяя ее - я не понимаю.
Почему сессия не хавает двумерный массив?
сессия все хавает.
не надо только использовать число, как массив.
Тебя в этом случае и безо всяких сессий обругают.
возьми, да попробуй:
$arr=12345;
$arr[]=1;
и больше так не делай
 

SiMM

Новичок
Скаляр - это "не массив" (утверждение нестрогое - думаю, об объектах говорить ещё рано ;) )
PHP:
if (isset($_SESSION['control']) && !is_array($_SESSION['control']))
  unset($_SESSION['control']);
$_SESSION['control'][] = $rand;
Надеюсь, это прояснит ситуацию.
 

MiRacLe

просто Чудо
1)
PHP:
$_SESSION['control'] = array('rand' => $random_value);
т.к. тогда в форуме пользователь сможет заполнять только одну форму на отправку сообщения.
Изменить "число" после отправки не позволяет религия ?
 

Фанат

oncle terrible
Команда форума
MiRacLe
при чем здесь отправка?
на этом форкме я бывает в 5 темах сразу отвечаю
 

MiRacLe

просто Чудо
герой :)

хотя да - палево....был глуп не подумал,каюсь...
 
Сверху