CWebUser сохранение данных при закрытии приложения

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
theo
Сообщения: 10
Зарегистрирован: 2011.11.17, 17:52

CWebUser сохранение данных при закрытии приложения

Сообщение theo »

В своем приложении я использую объект CWebUser. В процессе работы пользователя накапливаю данные о всех изменениях при помощи CWebUser::setState. Так вот, как правильно сохранить эти данные после того, как пользователь закончит работу с приложением, например, просто закрыв браузер?
Есть ли какое-то определенное событие или что-то подобное?

Заранее спасибо
Аватара пользователя
stasuss
Сообщения: 10
Зарегистрирован: 2012.02.29, 08:47

Re: CWebUser сохранение данных при закрытии приложения

Сообщение stasuss »

наверное куками
Yii::app()->request->cookies['cookie_name'] = new CHttpCookie('cookie_name', $value);

а вообще в классе CWebUser есть защищенные методы restoreFromCookie(), saveToCookie().. видать оно автоматически пишет в куки сессию.. а вообще можно извернуться и вызывать эти методы вручную..

вот теперь понял до конца. надо включить cookie-based authentication и тогда все переменные сохраненные через setState() будут сохраняться в куки.
хотя может я чото не так понял.. но опробовать нет возможности сейчас к сожалению.
Вещи не всегда такие, какими кажутся. По моему личному опыту они гораздо хуже. (инквизитор Титус Дрэйк)
theo
Сообщения: 10
Зарегистрирован: 2011.11.17, 17:52

Re: CWebUser сохранение данных при закрытии приложения

Сообщение theo »

Нет, куки не подходят, их можно подменить, к тому же автологин отключен и все пишется видимо только в сессию.
К тому же как получить доступ к кукам, когда пользователь уже закрыл браузер?

Нужно что-то подобное:
http://habrahabr.ru/blogs/php/78774/

Наверняка в Yii есть для этого своя обертка, вот только я пока не нашел, как она называется.
Jampire
Сообщения: 207
Зарегистрирован: 2011.01.28, 11:45
Откуда: Гомель
Контактная информация:

Re: CWebUser сохранение данных при закрытии приложения

Сообщение Jampire »

Очень плохое решение. Даже в комментариях к статья разъяснено почему. Лучше хранить сессию в базе и удалять по истечению некоторого времени.
Изображение
Человек, говорящий, что это невозможно сделать, не должен мешать тому, кто это делает.
esche
Сообщения: 1054
Зарегистрирован: 2010.11.24, 03:39

Re: CWebUser сохранение данных при закрытии приложения

Сообщение esche »

theo писал(а):Так вот, как правильно сохранить эти данные после того, как пользователь закончит работу с приложением, например, просто закрыв браузер?
Есть ли какое-то определенное событие или что-то подобное?
Событие, возникающие при закрытии браузера (а также при выключении компа, обрыве сетевого кабеля (wifi,3g,4g,5g итд), отключении электричества) нельзя отловить на сервере, поэтому, если данные действительно нужны - следует хранить их там, откуда можно надёжно достать. По мне - лучше сразу в базу (в файл, в NOSQL или куда там ещё)... Причём, не обязательно сессию хранить в базе.. Можно хранить сами логи
...
theo
Сообщения: 10
Зарегистрирован: 2011.11.17, 17:52

Re: CWebUser сохранение данных при закрытии приложения

Сообщение theo »

Суть в том, что хочется как раз минимизировать обращение к базе данных. Есть действие, которое может вызываться очень часто и возможно большим количеством юзеров. Результат этого действия не хочется каждый раз писать в базу, вместо этого для снижения нагрузки на приложение планируется накапливать изменения в сессии и записывать один раз при переходе между видами приложения. Встала проблема, как отследить эти изменения в Yii при выходе пользователя из браузера.

А в чем по-вашему минус?
Пока что видится только один - возможно не всегда могут сработать destroy-, gc - callback сессий, но нужно оценить этот процент на практике.
theo
Сообщения: 10
Зарегистрирован: 2011.11.17, 17:52

Re: CWebUser сохранение данных при закрытии приложения

Сообщение theo »

Под событием имеется в виду уничтожение сессии пользователя. На них можно навесить обработчики. Хочется узнать, как правильно это делается в Yii, а потом уже на практике оценить процент их запуска.
Ответить