Регистрация | Последние сообщения | Персональный список | Поиск | Настройка конференции | Личные данные | Правила конференции | Список участников | Top 64 | Статистика раздела | faq | Что нового v.2.3 | Чат
Skunk Forum - Техника, Наука, Общество » Общекомпьютерный »
php. Можно ли засунуть в переменную $_SESSION ['abcd'] ...

Версия для печати (настроить)

Новая тема | Написать ответ

Подписаться

Автор Тема:   php. Можно ли засунуть в переменную $_SESSION ['abcd'] ...
VoLK

Сообщений: 13838
Откуда: Россия
Регистрация: Ноябрь 2000

написано 24 Ноября 2005 14:47ИнфоПравкаОтветитьIP

Массив? И как это сделать?
В версии 4.4 php всё работает при тупом:
1 $a = целое число;
2 $_SESSION ['abcd']= array();
3 $_SESSION ['abcd'][$a] = целое число;
И всё это считывается на других страницах.

в 5.04 php
при повторном посещении скрипта
на 3 строку ругается, типа обращаюсь к скаляру как к массиву.
видимо она к тому времени забывает что, $_SESSION ['abcd']= array();

пошёл другим путём, написал $_SESSION ['abcd'] = array($a => целое число);
теперь уже не ругается как раньше, зато прежние значения не помнит.
Т.е. сессия никак не запоминает массив.

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

Добавление от 24 Ноября 2005 15:27:

Почти та же проблема. Но что ему помогло осталось за кадром (во всяком случае для меня).
ссылка

Elder
Twisted Firestarter

Сообщений: 1194
Регистрация: Июнь 2001

написано 25 Ноября 2005 01:33ИнфоПравкаОтветитьIP

Почти та же проблема. Но что ему помогло осталось за кадром (во всяком случае для меня).
Не знаю, что за проблема у тебя, но тот парень пытался запихнуть массив в скаляр. Простая проверка перед созданием массива if isset() && !is_array() then unset() решила его проблему.

VoLK

Сообщений: 13846
Откуда: Россия
Регистрация: Ноябрь 2000

написано 25 Ноября 2005 01:55ИнфоПравкаОтветитьIP

Elder
У меня проблема не проверить, а запихнуть.
Впрочем она, похоже, становится теоретической, если мой скрипт передачи массивов как строк заработает на хостере (на 4.4 он работает, но я уже ни во что не верю. )

Белый Ворон
MchlP

Сообщений: 2703
Откуда: Столица и Провинция РФ
Регистрация: Июль 2001

написано 25 Ноября 2005 09:29ИнфоПравкаОтветитьIP

VoLK
в твоем случае, PHP5 может ругаться, потому что переменная $_SESSION_['abcd'] уже существует, причем как скаляр и обявить ее массивом - что мертвому припарка. Упомянутый Elder'ом способ - решение этой проблемы.
PHP4 не делат такой проверки - поэтому там все работает. PHP5 - строже относится к таким выкрутасам, поэтому, либо ищи у себя определение $_SESSION_['abcd'], либо тупо сделай проверку (и разрушение) перед присвоением, что-то типо того: if isset() && !is_array() then unset()

VoLK

Сообщений: 13849
Откуда: Россия
Регистрация: Ноябрь 2000

написано 25 Ноября 2005 09:46ИнфоПравкаОтветитьIP

Белый Ворон
Проверку сделать несложно. Просто что мне даст эта проверка? Только знание того, что $_SESSION_['abcd'] уже не array (а ведь я её уже делал массивом).
Т.е. я каждый раз попадаю на этот if -
if(!isset($_SESSION['abcd']) || !is_array($_SESSION['abcd']))

Если я каждый раз буду писать скаляру array, всё равно предыдущие данные не восстановить.

Белый Ворон
MchlP

Сообщений: 2704
Откуда: Столица и Провинция РФ
Регистрация: Июль 2001

написано 25 Ноября 2005 10:09ИнфоПравкаОтветитьIP

VoLK
Просто что мне даст эта проверка? Только знание того, что $_SESSION_['abcd'] уже не array (а ведь я её уже делал массивом).
Нельзя сделать скаляр массивом, понимаешь?
Утверждение: $_SESSION_['abcd'] уже не array - не имеет смысла, потому что $_SESSION_['abcd'] еще скаляр :-))
Чтобы сделать $_SESSION_['abcd'] массивом, нужно сначало разрушить скаляр $_SESSION_['abcd'].
:-))
Если я каждый раз буду писать скаляру array,
Вот и определись, скаляр у тебя $_SESSION_['abcd'] или массив. Либо так, либо так - третьего, как говорил наш дрюк, - не дано. :-))

VoLK

Сообщений: 13853
Откуда: Россия
Регистрация: Ноябрь 2000

написано 25 Ноября 2005 14:52ИнфоПравкаОтветитьIP

Белый Ворон
Похоже нашёл. На одной странице похоже теряется сессия. Причём только на одной.
Почему понять пока не могу. Сессия приходит, но на самой странице начинает творить чудеса.
Учитывая, что я гоняю уже строку, а не массив, то следующий шаг - записывать её в базу и послать весь этот механизм сессиий нах. Что ты советова мне с самого начала.
У меня паралельно такой вопрос, я делаю в базе поле TIMESTAMP и каждый пришедний сравнивает его с временем и если устарело стирает. Так?

Добавление от 25 Ноября 2005 16:02:

Обнаружил ошибку! Конфликт имени переменной сессии и переменной возвращения запроса mysql_query.
Не знаю, можно ли это назвать ошибкой, а вот то, что explore кромсает строку - бесспорно баг.

skunk
Злобный админ

Сообщений: 5503
Откуда: СССР, город-герой Ленинград
Регистрация: Ноябрь 2000

написано 25 Ноября 2005 18:46ИнфоПравкаОтветитьIP

VoLK
а вот то, что explore кромсает строку - бесспорно баг
Еще один баг нашел? Тебе в Микрософт резюме надо послать. Сразу на 5 куе возьмут, со знанием одного албанского даже.

VoLK

Сообщений: 13857
Откуда: Россия
Регистрация: Ноябрь 2000

написано 25 Ноября 2005 19:52ИнфоПравкаОтветитьIP

skunk
Ошибся. Explode() имел ввиду.

Ваш ответ:

Коды форума
Смайлики


Ник:    Пароль       
Отключить смайлики

Все время MSK

Склеить | Разбить | Закрыть | Переместить | Удалить

Новая тема | Написать ответ
Последние сообщения         
Перейти к:

Свяжитесь с нами | skunksworks.net

Copyright © skunksworks.net, 2000-2018

Разработка и техническая поддержка: skunksworks.net


Рейтинг@Mail.ru Яндекс.Метрика