CakePHP удаляет сессию в отпуске пользователя - PullRequest
0 голосов
/ 26 августа 2011

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

Как я хочу удалить сеанс Auth.redirect, если они решили не входить в систему, чтобы при последующем возврате они не были перенесены в предыдущий сеанс!

По сути, запустив это:

$this->Session->delete('Auth.redirect');

Я думаю, что какая-то проверка в AppController, которая знает, когда пользователь был отослан из формы входа и удаляет сеанс auth.redirect???

Или еще лучше проверить, является ли текущая страница формой входа, а если нет, то удалить сеанс !!!

и для тех, кто заинтересован, таков мой метод входана данный момент выглядит:

function login()
{
        if(!(empty($this->data)) && $this->Auth->user())
        {
            $back_to = $this->Session->read('back_to');

            $auth_redirect = $this->Session->read('Auth.redirect');

            if($auth_redirect)
            {
                $this->redirect($auth_redirect, null, true);
            }
            else if($back_to)
            {
                $this->redirect($back_to, null, true);
            }
            else
            {
                $this->redirect($this->Auth->redirect(), null, true);
            }
        }
        else
        {
            $this->Session->write('back_to', $this->referer());
        }
}

Спасибо

Ответы [ 3 ]

1 голос
/ 26 августа 2011

Я не знаком с CakePHP, но ваш вопрос звучит немного странно для меня. Вы говорите о PHP, языке сценариев на стороне сервера. PHP-скрипт выполняется только при поступлении запроса (пожалуйста, исправьте меня, если есть что-то, чего я еще не знаю).

Итак, когда пользователь заходит на страницу входа, скрипт выполняется. Теперь подумайте о следующем: сразу после загрузки страницы входа в систему пользователь закрывает вкладку браузера со страницей входа. Это не вызывает запрос, поэтому нет возможности сообщить серверу об этом действии.

Может быть, CakePHP может делать такие магические вещи, но я думаю, что мы говорим о HTTP без сохранения состояния, поэтому я не могу представить, как реализовать что-то подобное.

0 голосов
/ 26 августа 2011
        if($this->here != '/admin/login')
        {
            $this->Session->delete('Auth.redirect');
        }

или это:

if($this->here != Router::url(array('admin'=>true,'controller'=>'users','action'=>'login')))
            {
                $this->Session->delete('Auth.redirect');
            }
0 голосов
/ 26 августа 2011

Вы можете добавить метку времени в сеанс, когда вы последний раз получали запрос от пользователя.Например, в AppController::beforeFilter просто добавьте $this->Session->write('lastSeen', time()).Затем вы можете проверить, сколько времени прошло с момента последнего открытия пользователем какой-либо страницы, и сбросить значение Auth.redirect, если этот интервал был слишком длинным.

Это в основном то же самое, что истечение сеанса, только вболее контролируемая мода.Если вы хотите посчитать время, когда пользователь просто отображает вашу страницу на своем экране, как «активность», вы можете использовать Javascript AJAX, чтобы продолжать посылать запросы на сервер, чтобы сигнализировать «Я активен!»

Это все довольно много работы, но очень мало пользы.HTTP не имеет состояния и не позволяет вам легко отслеживать пользователя, точка.На самом деле отслеживание того, «пользователь» «активно» просматривает вашу страницу или нет, влечет за собой огромные накладные расходы, и в этом случае кажется неуместным усилием для чрезвычайно узкой цели, для которой вы хотите его использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...