2016-12-29 4 views
0

私はここでコンドームにいます。 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が呼び出されたファイルの先頭にあります。

+0

Ryanに感謝します。私たちの仕事はスクラムに基づいており、私には新しい特徴のように聞こえます。私はそれを提案することができましたが、その間にセッションをX時間またはむしろユーザーの日のシフトに延長するだけです。私はあなたの提案に注意を払った。 – Maximum86

答えて

1

この動作に影響を及ぼすために使用できるセッション構成は、gc-maxlifetimeとの両方です。

これを行うにはsetcookie関数を使用しないでください。

+0

ありがとう私はいくつかのグーグルを行い、私の問題が解決するかどうかを確認します。 – Maximum86

+0

あなたの提案で私の質問を更新しました。私が指定した時間が10分であり、テスト目的のためだけに5に減少した後に追い出されていないようです。これにいくつかの洞察力を私に与えてもらえますか?どのようにしてgc-maxlifetimeとcache_expireを最適に使うことができますか? – Maximum86

+0

このアプリケーションを実行するOSはどれですか?いくつかのLinuxサーバは、 'session.gc_maxlifetime'を使用する機能を無効にし、cronジョブを使用してクリーンアップを行います。 – Dekel

関連する問題