私はここでコンドームにいます。 Google OAuthを使用するアプリケーションがあり、ユーザーがログインしたままの時間を長くする必要があります。PHPでログインしているセッションを増やす
フロントコントローラー(index.php)によって呼び出されるスクリプトの冒頭には、グローバル変数$ _SESSIONの存在をチェックします。
if(!isset($_SESSION)) @session_start();
ログインしたユーザーのセッションデータが表示されるため、これはすべて問題ありません。セッションに保存されたGoogleトークンデータには、expires_in
というキーが3299(1時間)の値で設定されているため、これにどのように対処するのか正確には分かりません。
私の分析では、Googleからのセッションタイムアウトがあり、これが拡張されるようにこれを制御することができます。トークンをオフラインで更新するためにGoogleに認証するコードを更新する必要があります。私は本当に私のアプリケーション内のセッションのタイムアウトを常にコントロールできるというこの理由については確かではありません - 私が持っている問題は、どのようにしているのでしょうか? 。
以下は、私はちょうど@session_startコールの上に書いたコードスニペットです:
if(isset($_SESSION)){
$sessionKeys = array(key1, key2,key3); //Keys that are destroyed on logout
$refreshLifetime = false;
foreach($sessionKeys as $key){
if(!empty($_SESSION[$key]){
$refreshLifetime = true;
}
}
if($refreshLifetime){
@setcookie(session_name(), session_id(), time() * 3600);
}
}
何かがどのように異なる動作と一緒がある可能性がPHPで処理セッションのすべての複雑さのために、このコードに関する権利を感じていませんシステムは、PHPのセッションを、そのクライアント側とサーバー側のセッション処理に追加します。
誰かがこの問題に取り組むことができるというアイデアを手伝ってもらえますか。
EDIT
私は、アプリケーション自体の中/var/lib/php5
からディレクトリへのパス保存アプリケーションセッションを移動することにしました。私はsession.gc_maxlifetime
を10分に設定してロックアウトされるか、ログインページにリダイレクトされるかどうかを確認しましたが、私はそうではありません。
enter link description hereを読んだ後に私が躊躇していたにもかかわらず、cache_expire
の設定を追加しました。最初のユーザーノートは、gc_lifetimeとキャッシュの有効期限の使用をリンクしていないようです。
これを入れる必要があるのであれば、session.gc_maxlifetimeに設定したものと同じにする必要がありますか?私は、アプリケーション内の非アクティブの5分後に戻ってログインページにリダイレクトされるように期待していたとして
ini_set('session.save_path', __DIR__ .'/../tmp');
ini_set('session.gc_maxlifetime', 300);
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 100);
session_cache_limiter('private');
session_cache_expire(300);
しかし、これは動作しませんでした。私が紛失しているものがありますか?このコードは、session_start
が呼び出されたファイルの先頭にあります。
Ryanに感謝します。私たちの仕事はスクラムに基づいており、私には新しい特徴のように聞こえます。私はそれを提案することができましたが、その間にセッションをX時間またはむしろユーザーの日のシフトに延長するだけです。私はあなたの提案に注意を払った。 – Maximum86