Я работаю в РИА. Мы используем Memcached для хранения сессий, и я установил http://pecl.php.net/package/memcache, и мой обработчик PHP-сессий выглядит так:
$session_save_path = "tcp://$host:$port?persistent=1&weight=2&timeout=2&retry_interval=10, ,tcp://$host:$port ";
ini_set('session.save_handler', 'memcache');
ini_set('session.save_path', $session_save_path);
Время ожидания сеанса установлено на 30 минут. В моей RIA я хочу периодически вызывать серверный скрипт через AJAX, чтобы проверить, жив ли сеанс посетителя. Если вызов ajax возвращает false, я затемню экран и показываю довольно красивое окно для продолжения сеанса.
Теперь проблема в серверном скрипте. Мне нужно определить, существует ли сеанс без продления времени существования сеанса, если он существует.
Я не совсем осведомлен о работе обработчика сеанса, но я уверен, что сделаю это:
<?
session_start();
if($_SESSION['loggedin'] == "yes")
echo "true";
else
echo "false";
?>
Я почти уверен, что это продлит срок жизни сеанса (на стороне сервера, но также и на стороне клиента, отправив новый файл cookie клиенту). И сеанс будет существовать неопределенно долго.
Некоторые варианты я рассмотрел, но исключил:
- Не выполняйте никаких серверных вызовов, но используйте таймер JavaScript на клиенте (истекает через 30 минут, например). Это не будет работать, когда пользователь имеет RIA, открытый в нескольких окнах
- Попробуйте взломать session_start (), чтобы предотвратить отправку нового свежего куки клиенту. Это может работать на стороне клиента, но время истечения все равно будет обновляться при внутренней обработке session_handling.
Мне бы хотелось кое-какую идею, Т.и.а.