[PHP + jQuery] Как поддерживать сессию пока пользователь на странице

Автор: urmaul
04.07.2012 20:10

Представьте ситуацию: пользователь залогинился, открыл страницу и отвлекся часа на три. А потом он попытался перейти на другую страницу и оказался опять на странице логина. Сессия истекла.

Неприятная штука. Особенно она неприятная когда у вас навороченный фронтенд и много аякса. Внезапно один из аякс-запросов редиректится на страницу логина, всё ломается, а пользователь этого и не видит.

Самое простое решение этих проблем - искусственно поддерживать сессию всё время пока пользователь на сайте. Для этого мы будем каждые десять минут делать ajax-запрос на сервер.

Для этого на сервере сделаем php-файлик reopen-session.php с таким содержимым:

 
<?php
  sesstion_start();
 

Он не будет ничего делать или возвращать. Просто поднимаем сессию и завершаем скрипт.

Если вы пользуетесь фреймворками или большими CMS — поднимать сессию стоит через их библиотеки. Меньше шансов, что что-нибудь поломается. Например, в Yii Framework это можно сделать таким экшном:

 
/**
 * Empty action to keep session open.
 */
public function actionKeep()
{
  Yii::app()->session->open();
}
 

Теперь клиентская часть. Создаем интервал и каждые десять минут дергаем наш скрипт:

 
/* Keep session open */
$(function(){
  var reopenSession = function() {
    $.get('/reopen-session.php');
  };
 
  window.setInterval(reopenSession, 10 * 60 * 1000);
});
 

Готово. Теперь нам не страшны серый волк и всякие мелочи типа уснувшего пользователя.

Обновлено 04.07.2012 20:17

 

Добавить комментарий


Защитный код
Обновить