私はRIAで働いています。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 を返した場合、画面をブラックアウトし、かなりの relogbox を表示してセッションを続行します。
問題はサーバーサイドスクリプトにあります。セッションが存在する場合、セッションの有効期間を延長せずにセッションが存在するかどうかを判断する必要があります。
私はセッション ハンドラーの仕組みについて完全に知っているわけではありませんが、これを行うかどうかはかなり確信しています。
<?
session_start();
if($_SESSION['loggedin'] == "yes")
echo "true";
else
echo "false";
?>
これにより、セッションの有効期間が更新されると確信しています(サーバー側だけでなく、新しいCookieをクライアントに送り返すことによりクライアント側でも)。そして、セッションは無期限に存在します。
私が検討したが除外したいくつかのオプション:
- サーバー側の呼び出しは行わず、クライアントで JavaScript タイマーを使用します (たとえば、30 分後に期限切れになります)。ユーザーが複数のウィンドウで RIA を開いている場合、これは機能しません。
- session_start() をハックして、新しい新鮮な Cookie をクライアントに送り返さないようにしてください。これはクライアント側で機能する可能性がありますが、有効期限は内部の session_handling で更新されます。
アイデアが欲しいです、ティア