|
автор: Демон (15.12.2005 в 15:04) |
|
| Я создаю игру. В сессии хранятся данные о пользователе. Но из-за сложности игры мне желательно использовать временное хранилище для данных битвы. Понятно, что нельзя хранить данные в сессии пользователя. Для удобства работы создавать файл тоже не хотелось бы: уж лучше тогда в БД. Но эти данные извлекаются из БД со скрипом: ооочень уж навороченные параметры битвы, а требуются постоянно: для чтения и изменения. Так можно ли создать, "не умирающий" после выхода игрока, файл, с которым работать как с сессией. Или это баловство - бить воробьёв из пушки? | |
|
|
|
|
автор: Демон (15.12.2005 в 15:07) |
|
|
для: Демон
(15.12.2005 в 15:04)
| | И ещё, я не понял могу ли я в php4 сериализовать, например четырёхмерный массив? Мне это действительно нужно: три-четыре измерения. ;-( | |
|
|
|
|
|
|
|
для: Демон
(15.12.2005 в 15:07)
| | Сериализовать можно, но только один раз, т.е. два раза прогнать текст через функцию serialize() - уже вряд ли получится, можно обратно данные не восстановить при помощи unserialize(). Это связано с тем, что в PHP - это скорее не сериализация, а упаковка в текстовую строку. | |
|
|
|
|
|
|
|
для: Демон
(15.12.2005 в 15:04)
| | В принципе, можно хранить и в сессии. Практика интернет-магазинов показывает, что в них можно хранить довольно объемную и сложноструктурированную инфрмацию. А в чем проблема с созданием файла? | |
|
|
|
|
автор: Демоны (15.12.2005 в 16:02) |
|
|
для: ck
(15.12.2005 в 15:16)
| | Писать fopen'ы, потом вручную записывать переменные. К тому же мне нужно будет вручную сериализовывать весь массив переменных каждый раз при смене значений. А так -автоматом. Если по хорошему, то сессии вообще нужны только для удобства: всё что можно с ними - можно и без них, например через БД. | |
|
|
|
|
автор: Демон (15.12.2005 в 17:38) |
|
|
для: Демон
(15.12.2005 в 15:04)
| | И ещё. Я с сессиями почти не знаком. Так вот в одном мануале было написано, что, писали unset на переменные, которые будут использоваться в сессиях, мол не повредит. Необходимо ли это? Может, скорости выполнения это и не повредит (вряд-ли на нашем проекте будет сильно больше двух человек: разработчиков). Но удобочитаемости текста большое количество переменных явно повредит. Можно ли запросом www.site_name.ru/anymodule.php?auth=1 поменять флаг авторизации на единицу? А если можно, то не подскажете, как одним ударом убить (unset'ить) лишние переменные. Но не все. | |
|
|
|
|
|
|
|
для: Демон
(15.12.2005 в 17:38)
| | Хм... что-то не очень понятно, особенно, начиная с
Можно ли запросом www.site_name.ru/anymodule.php?auth=1 поменять флаг авторизации на единицу?
|
| |
|
|
|
|
|
|
|
для: Демон
(15.12.2005 в 15:04)
| | Вы можете реализовать собственный вариант сессий, например, хранить их в базе данных, удалять, когда вздумается - осуществлять поиск по всем игрокам и т.п. Более того, если параметры так сложны для вас это скорее является обязательным. Пример, такого переопределения сессии можно найти в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=5253 | |
|
|
|
|
автор: Демон (16.12.2005 в 15:33) |
|
|
для: cheops
(15.12.2005 в 23:13)
| | А в принципе для чего сделаны сессии? Только для того чтобы автоматизировать процесс записи в файл или БД? Что они в принципе ещё позволяют, не подскажете? И всё-таки два айла сессий создавать можно. Но как у них создаются имена Если я два раза подряд пытаюсь создать сессию - как мне получить к каждой из них указатель?
А насчёт непонимания вопроса. Если злой дядя хакер напишет в адресной строке переменную $auth=1, а я затем зарегистрирую сессию в которой содержится эта переменная, но, например с нулевым значением. Что у меня после инициализации сессии будет лежать в $auth: 0 или 1? | |
|
|
|
|
|
|
|
для: Демон
(16.12.2005 в 15:33)
| | сессия - это хранение переменных на сервере во время взаимодействия с пользователем. Самих переменных пользователь не видит, а видит только идентификатор сессии (случайный номер). Сессии так же удобны тем, что не надо гонять перепенные со страницы на страницу: достаточно передать идентификатор и все переменные станут доступны и на другой странице тоже. | |
|
|
|
|
|
|
|
для: Демон
(16.12.2005 в 15:33)
| | Сессии предназначены для того, чтобы компенсировать недостаток HTTP-протокола, который не сохраняет состояния между обращениями клиента к серверу. HTTP-сервера всякий раз "думают", что к ним обращается новый клиент. Сессии позволяют "запомнить" клиента и сообщить вам, что это не первое его обращение. Кроме того, они позволяют сохранить результаты работы предыдущего обращения, без них бы информация терялась бы...
Насчёт злобного дяди :))) не очень понятно... вообще если вы будете хранить данные в суперглобальном массиве $_SESSION - никто не сможет их перезаписать при помощи GET-параметров. | |
|
|
|