Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Работа с сессиями
 
 автор: Демон   (15.12.2005 в 15:04)
 
 

Я создаю игру. В сессии хранятся данные о пользователе. Но из-за сложности игры мне желательно использовать временное хранилище для данных битвы. Понятно, что нельзя хранить данные в сессии пользователя. Для удобства работы создавать файл тоже не хотелось бы: уж лучше тогда в БД. Но эти данные извлекаются из БД со скрипом: ооочень уж навороченные параметры битвы, а требуются постоянно: для чтения и изменения. Так можно ли создать, "не умирающий" после выхода игрока, файл, с которым работать как с сессией. Или это баловство - бить воробьёв из пушки?

   
 
 автор: Демон   (15.12.2005 в 15:07)
 
   для: Демон   (15.12.2005 в 15:04)
 

И ещё, я не понял могу ли я в php4 сериализовать, например четырёхмерный массив? Мне это действительно нужно: три-четыре измерения. ;-(

   
 
 автор: cheops   (15.12.2005 в 23:18)   письмо автору
 
   для: Демон   (15.12.2005 в 15:07)
 

Сериализовать можно, но только один раз, т.е. два раза прогнать текст через функцию serialize() - уже вряд ли получится, можно обратно данные не восстановить при помощи unserialize(). Это связано с тем, что в PHP - это скорее не сериализация, а упаковка в текстовую строку.

   
 
 автор: ck   (15.12.2005 в 15:16)   письмо автору
 
   для: Демон   (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'ить) лишние переменные. Но не все.

   
 
 автор: cheops   (15.12.2005 в 23:15)   письмо автору
 
   для: Демон   (15.12.2005 в 17:38)
 

Хм... что-то не очень понятно, особенно, начиная с
Можно ли запросом www.site_name.ru/anymodule.php?auth=1 поменять флаг авторизации на единицу?

   
 
 автор: cheops   (15.12.2005 в 23:13)   письмо автору
 
   для: Демон   (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?

   
 
 автор: Loki   (16.12.2005 в 16:14)   письмо автору
 
   для: Демон   (16.12.2005 в 15:33)
 

сессия - это хранение переменных на сервере во время взаимодействия с пользователем. Самих переменных пользователь не видит, а видит только идентификатор сессии (случайный номер). Сессии так же удобны тем, что не надо гонять перепенные со страницы на страницу: достаточно передать идентификатор и все переменные станут доступны и на другой странице тоже.

   
 
 автор: cheops   (17.12.2005 в 00:38)   письмо автору
 
   для: Демон   (16.12.2005 в 15:33)
 

Сессии предназначены для того, чтобы компенсировать недостаток HTTP-протокола, который не сохраняет состояния между обращениями клиента к серверу. HTTP-сервера всякий раз "думают", что к ним обращается новый клиент. Сессии позволяют "запомнить" клиента и сообщить вам, что это не первое его обращение. Кроме того, они позволяют сохранить результаты работы предыдущего обращения, без них бы информация терялась бы...

Насчёт злобного дяди :))) не очень понятно... вообще если вы будете хранить данные в суперглобальном массиве $_SESSION - никто не сможет их перезаписать при помощи GET-параметров.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования