2017-09-28 22 views
0

私はボタンを使ってログアウトすると、私はユーザーテーブルの属性(isActive)を更新します。生涯が終わるときを除いて、すべてが機能します。 なぜですか?LifeTimeの後 - Session.php自動ログアウト

このデータの使用は厳密に情報を提供します。だから、単純な開発は良い以上に行きます。

ありがとう

Session.php

/* 
|-------------------------------------------------------------------------- 
| Session Lifetime 
|-------------------------------------------------------------------------- 
| 
| Here you may specify the number of minutes that you wish the session 
| to be allowed to remain idle before it expires. If you want them 
| to immediately expire on the browser closing, set that option. 
| 
*/ 

'lifetime' => 120, 

'expire_on_close' => false, 

正確に失敗した何AuthenticateUsers.php

public function logout(Request $request) 
{ 
    User::where('id', Auth::user()->id)->update(['isActive' => '0']); 

    $this->guard()->logout(); 

    $request->session()->invalidate(); 

    return redirect('/login'); 
} 

答えて

1

私は本当にあなたの質問を得ることはありませんが、ここでは何が起こっているのかについてのヒントを教えてください。

あなたが理解しなければならないこと私は、生涯の時間が過ぎると、クライアントは長い時間あなたのウェブサイト上に存在しなくなるので、特別なことは起こらないと考えています。クライアントに対しては何も行われず、サーバー上では何も行われません。単に検出する方法がなく、関連するリクエストがなくてもコードを実行する方法がない(単純な)ためです。起こる

唯一のものは、あるいは起こらないかもしれないかもしれないクッキー、と次の要求に、laravelは寿命が渡されたことを検出し、クッキーを無効として検討します(と非logguedなどに関連する要求を検討することですリクエスト)

あなたのログアウトルートは、ユーザーが特に切断を求めるときに呼び出されます。 laravelはそのセッションからのリクエストを得ずにセッションの無効化を検出しないため、セッションが無効になったときに魔法のように呼び出されることはありません。無効化が検出されると、laravelはユーザーが既にログアウトされているため(セッションが無効であるため、データを信頼して使用できないため)ログアウトルートを呼び出しません。

あなたが望むことを行うための方法は、ユーザーの最後のアクションを保存することです(つまり、彼は要求を待って更新します)。最後のアクションがX分以上前のすべてのユーザーを非アクティブと見なします。それは非常に信頼性の低いことに注意してくださいが、それはかなり良い見積もりです。

信頼性の高い方法が本当に必要な場合は、Detect user exit siteという質問をご覧ください。ただし、定期的にユーザーをポーリングすると、サーバーのパフォーマンスが非常に高くなることに注意してください。

+0

ありがとう、すばらしい説明! 私の英語は申し訳ありません... –

0

?ライフタイムセッションの有効期限が切れたときにusersテーブルは更新されませんか?

これは、これがセッションCookieの有効期間を設定することで自動的に行われるためです。 Cookieが期限切れになると、アプリ内のlogoutルートは呼び出されず、usersテーブルは更新されません。

これを達成する唯一の方法は、寿命を非常に長い分数(例:99999999 =>190 years)に設定し、ユーザーにログアウトボタンを押すことです。 しかし、ユーザーはブラウザウィンドウを閉じて、ログアウトせずにアプリケーションを終了することができます。

+0

良い解決策... 本当にそれが価値があるか、別の解決策を検討する必要があるかどうかを理解しなければなりません! ありがとうございました! –

関連する問題