Каков лучший метод персистентности действия для приложения Катализатора?

set .setEnable для вашего просмотра false отключить доступ к виду

help1.setEnabled(false);
help1.setVisibility(View.INVISIBLE);
8
задан brian d foy 7 January 2009 в 06:48
поделиться

5 ответов

В конце мы закончили тем, что захватили незаконченный запрос (URL+params) в автоматическом (), сериализировав и шифруя его, и передаче его через скрытый элемент формы на странице входа в систему. Если мы получили запрос входа в систему со скрытым заполненным элементом, мы дешифровали и десериализовали его и затем перенаправили соответственно (удостоверяющийся проходить через стандарт, "может этот пользователь делать эту вещь" пути выполнения кода).

1
ответ дан 5 December 2019 в 20:20
поделиться

Я не могу сдержать взгляды, что существует фундаментальный дефект в передавании под мандат 15-минутного тайм-аута в приложении, которое обычно требует> 15 минут между действиями.

Будьте этим, как это может, я посмотреть на переопределение Catalyst::Plugin::Session->delete_session метод так, чтобы любое содержание $c->request->body_parameters сериализируются и сохраняются (по-видимому, к базе данных) для более позднего восстановления. Вы, вероятно, хотели бы, чтобы некоторая элементарная проверка аргументов POST гарантировала, что они - то, что Вы ожидаете.

Точно так же create_session потребности взять на себя ответственность за то, что она вытащила эти данные назад из базы данных и сделала это доступным для исходного действия формы.

Это действительно походит на грязную ситуацию, и я склонен повторить свое первое предложение...

ОБНОВЛЕНИЕ:

Используете ли Вы delete_session или auto, парадоксальная проблема остается: Вы не можете сохранить эту информацию на сессии, потому что событие тайм-аута уничтожит сессию. Необходимо сохранить его где-нибудь более постоянный, таким образом, это переживает реинициализацию сессии. Catalyst::Plugin::Session самостоятельно использует Storable, и необходимо смочь с чем-то вдоль этих строк:

use Storable;
...
sub auto {
    ...
    unless (...) { #ie don't do this if processing the login action
        my $formitems = freeze $c->request->body_parameters;
        my $freezer = $rs->update_or_create(
              {user => $c->user, formitems => $formitems} );
        # Don't quote me on the exact syntax, I don't use DBIx::Class
    }
    ...
    my $formitems = $c->request->body_parameters
                  || thaw $rs->find({$user => $c->user})->formitems
                  || {} ;
    # use formitems instead of $c->request->body_parameters from here on in

Базовая таблица, вероятно, имеет (пользователь CHAR (x), formitems ТЕКСТ) или подобный. Возможно, метка времени так, чтобы ничто также не утрачивало новизну, восстанавливается. Вы могли бы также хотеть сохранить действие, которое Вы обрабатывали, чтобы быть уверенными, что полученные объекты формы принадлежат правильной форме. Вы знаете проблемы для своего приложения лучше, чем я.

4
ответ дан 5 December 2019 в 20:20
поделиться

Я хранил бы данные формы как своего рода на пользовательские данные в модели.

Катализатор:: Плагин:: Сессия:: PerUser является одним способом сделать это (хотя несколько hackishly). Я был бы reccomend использование плагина сессии только для аутентификации и хранения всей информации состояния в модели, которая хранит Ваши пользовательские данные вместо этого.

И я полностью соглашаюсь с мнением RET, что 15-минутный предел кажется действительно счетчиком, продуктивным в этом контексте.

2
ответ дан 5 December 2019 в 20:20
поделиться

Я столкнулся с этим при поиске CPAN что-то совершенно несвязанное.

Катализатор:: Плагин:: Мастер подразумевает делать точно, в чем Вы нуждаетесь. Документация предполагает, что может перенаправить к странице входа в систему при сохранении состояния предыдущего действия.

NB: я не использовал его, так не может ручаться за его эффективность.

1
ответ дан 5 December 2019 в 20:20
поделиться

У Вас мог всегда быть некоторый JavaScript на клиенте, который мешает сессии истекать путем выполнения маленького запроса каждые несколько минут.

Или у Вас могла быть проверка Ajax на активную сессию прежде, чем отправить форму и подарить пользователю новое поле входа в систему в то время в случае необходимости.

0
ответ дан 5 December 2019 в 20:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: