Опубликуйте данные снова после авторизации - PullRequest
1 голос
/ 01 февраля 2010

У меня есть приложение CakePHP, в котором есть форма, видимая посетителям, которые даже не вошли в систему. Если они отправляют форму без входа, они перенаправляются на страницу входа, откуда я хочу, чтобы они вернулись добавить контроллер со всеми представленными данными формы.

Возможно ли это? Если да, то как?

Ответы [ 5 ]

4 голосов
/ 02 февраля 2010

С макушки головы, что-то вроде этого должно работать:

function beforeFilter() {
    // be sure to do this before any Auth or security checks
    if ($this->RequestHandler->isPost() && $this->data) {
        $this->Session->write('last_post_data', $this->data);
    }
}

function add() {
    if (!$this->data && $this->Session->check('last_post_data')) {
        $this->data = $this->Session->read('last_post_data');
    }
    $this->Session->delete('last_post_data');

    if ($this->data) {
        // save as usual
    }
}

Просто убедитесь, что правильно удалили данные POST, сохраненные в сеансе, иначе это может привести к разрушению в дальнейшем. На самом деле вы должны не только сохранить данные в сеансе, но и определить, для какого действия оно было предназначено ($this->action и $this->controller), и проверить это перед повторным использованием данных в действии. Возможно также установить очень жесткий тайм-аут данных.

1 голос
/ 01 февраля 2010

Назначьте сеанс пользователям перед входом в систему и сохраните данные в сеансе. Этот сеанс может иметь атрибут loggedIn, который по умолчанию имеет значение false.

Не сохраняйте данные сеанса в cookie, сохраняйте их на стороне сервера:)

1 голос
/ 01 февраля 2010

Я думаю, вам придется использовать SESSION или сделать что-то вроде этого:

<input type="text" name="user" value="<?php echo $_POST['user'];?>">
<input type="password" name="password" value="<?php echo $_POST['password'];?>">

Обратите внимание, что выше я использовал массив POST, но вы также можете использовать массив Cake для этого, если он есть.

0 голосов
/ 02 февраля 2010

Если вы разрешаете только зарегистрированным пользователям доступ к форме, вы также можете добавить периодический AJAX-запрос на страницу с формой, поддерживающей сеанс.

window.setInterval(function(){
    jQuery.get("/url/to_page_that_does_nothing");
}, 600000);

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

Отказ от ответственности: 1) здесь используется jQuery 2) не так безопасно, как при повторном входе, но быстрее / проще в реализации.

0 голосов
/ 01 февраля 2010

Поместите session_start(); в верхней части формы и страницу входа. На странице действий формы установите переменные сеанса:

$_SESSION['name'] = $_POST['name'];
$_SESSION['address'] = $_POST['address'];
etc...

На странице формы установите значения, сказав следующее:

<input type="text" name="name" id="name" value="<?php echo $_SESSION['name']; ?>" />
<input type="text" name="address" id="address" value="<?php echo $_SESSION['address']; ?>" />
etc...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...