2016-04-10 49 views
0

sails.jsを使用すると、ユーザーセッションの終了時または終了時に関数を実行する方法はありますか?一部の設定はconfig/session.jsで行いますか?セッションがsails.jsで終了したときにコードを実行する

私が知っているのはsession.destroyです。セッションが破棄されたときに実行する関数を設定できますが、アプリケーションのグローバルな一意の関数である必要があります。

アイデアは、セッションが終了すると、オフラインとしてユーザーの状態をdbテーブルに書き込むことになります。

ありがとうございました。

答えて

1

ユーザーのセッションの有効期限が切れているかどうかを確認する方法がある場合は、

はい!セッションのサーバー側コンポーネントをどのように格納しているかによって異なります。従来のセッションでは、クライアント側(クッキーなど)とサーバー側でユーザーを覚えておくために、2つの部分が正しく機能することが必要であることを覚えておいてください。セイルズでは、サーバー側の部分がSession Config Fileadapter部分に指定されたデータストアに格納されます。このデータストアを照会して(デフォルトのメモリストアであっても)、期限切れのセッションを持つすべてのユーザーを探すことができます。より深く行く

...

ユーザーセッションの有効期限が切れたときに呼び出される具体的な方法があれば、あなたが求めている場合は、その後、いや、それはセッションの働き方ではありません。セッションは、HTTPをステートフルにする「ハック」です。彼らは死んでも私たちに通知される方法で活発なものではありません。セッションは、長いコードと日付を持つレコード(おそらくデータベース)です。ユーザーがサイトにアクセスすると、Cookieからコードを取得し、セッションデータベースのレコードを確認します。レコードが一致し、期限切れになっていない場合、HURRAY!彼らは誰であるかを知っており、彼らは依頼を続けます。レコードが一致しないか、期限切れになった場合、BOO!は再度ログインを促します。

は本当に私はあなたが誰かが「アクティブ」ユーザーを追跡するためにログインしているかどうかを監視しようと探している最後の文から推測

...今の結論にジャンプします。私はセッションがそれの貧弱な指標であることを示唆しています。セッションでは、あなたのサイトにログインしてから離れることができます。セッションの有効期限の長さ(24時間または30日は典型的な値です)に応じて、その時間全体でログインしているように表示されます。それは本当に役に立つ指標ですか?私はあなたのサイトを使っていませんが、あなたは私を「ログイン」しているように見せています。さらに、私は別のデバイス(電話や別のブラウザ)に戻ってきて、再びログインする必要があります。今は2つ以上のセッションがあります。どちらが正しいか?

アクティブな使用量を測定しようとしている場合は、WebSocket(誰かがあなたのページに接続/切断された時を正確に教えてくれるでしょうか?read more here)、または "ハートビート"訪問したページのいずれかを訪問すると、last seen atと記録されます。これは、誰がサイトに積極的にいるのか、たとえば1時間以上何もしていない人について、おおまかな目安となります。

+0

私は時間をかけてオプションを分析しました。 WebSocketは接続/切断を通知することができますが、問題はどのように(リンクをクリックするなどしても)ユーザーがページに参​​加して放棄した場合に発生します。私は1分ごとにサーバーにping(単純なajax要求を使用)することにしました。最後のpingとのサーバーの時間差が5分を超えると、ユーザーはオフラインとみなされます。あなたの詳細な答えをありがとう。 – dovahkiin

+0

あなたはまさに正しいです。大きなシンプルなソリューション@dovankiin。 WebソケットソリューションはAngularのような豊富なjavascript webappでうまく動作し、ユーザーが同じ「ページ」にいることが期待できるので、セッションソケットを維持できます。 – mwielbut

0

あなたは、ポリシーフォルダにsessionAuth.jsを追加するたとえば、すべてのルート にポリシーを追加することによってこれを行うことができます。

module.exports = function(req, res, next) { 

    // If you are not using passport then set your own logic 
    if (req.session.authenticated) { 
    return next(); 
    } 

    // if you are using passport then 
    if(req.isAuthenticated()) { 
    return next(); 
    } 

    //make your logic if session ends here 
     //** do some thing/


    }; 

は、設定/ policies.jsにこの行を追加します。

module.exports.policies = { 

    '*': 'sessionAuth' 
} 
関連する問題