2009-04-30 7 views
22

私は自分のウェブサイトでセッションベースのクッキーを使用しています。私の驚いたことに、セッションクッキー(永続的なクッキーではない)を設定し、タブを閉じてからサイトに再接続すれば、セッションクッキーはまだそこに残っていることに気付きました。それは私が実際に期待していたものではありません。私は、セッションクッキーが削除されると予想していました。タブを閉じないとセッションクッキーが削除されないのはなぜですか?

ブラウザを閉じると、セッションCookieが削除されるため、同じ結果を得るためにタブを閉じるのはなぜですか?

したがって、私はPHP5とjQueryを使用しています。タブが閉じられたときにこのセッションの問題を修正できるような何かができるのですか?残念ながら、BODYタグのonbeforeunloadイベントは、ページから離れてクリックするとそのイベントを発生させるだけでなく、タブを閉じるため有用ではありません。

答えて

14

セッションクッキーは、ウィンドウごとではなくプロセスごとです。新しいウィンドウを選択しても、同じセッションIDを取得できます。この動作は理にかなっています。サイトをブラウズしているときに新しいウィンドウを開くたびに、ユーザーが再度サインインすることは望ましくありません。

私はこれを回避するための実際の方法を知っていません。あなたは、タブの閉鎖に依存する必要がある場合は

+0

Paul、下のSanderへの私のコメントを参照してください。 "ここに問題があります..." –

+1

このような状況では、タブの閉じ方は重要な問題ではありません。セッションの有効期限をより能動的に制御しています。あなたは、ユーザーアクティビティがなくても自動的にログアウトする、JS内のクライアントで何らかの種類のアクティビティタイムアウトを実装したいと思うでしょう。このような行動は、ほとんどの銀行サイトで発生します。 –

+0

Paul、そうです。私はこの問題について眠っており、それが私が取る予定の行動の過程です。今、それを実装する最も最適な方法について別のstackoverflow質問に入れてください。 –

8

これは仕様であり、変更しようとすると非常に悪い考えです。ユーザーが新しいタブでリンクを開いて閉じた場合はどうなりますか?元のタブのセッションを破棄する必要がありますか?もちろん違います!これは、あなたがこれについて考えるべきではない理由を示しています。

セッションは、最後のブラウザウィンドウが閉じると終了します。あなたが他のものを望むなら、あなたは:

  1. セッションをしたくありません。
  2. は、独自の「ミニセッション」インフラストラクチャを作成する必要があります。
  3. は恐らく怪我やバグの世界にあるでしょう。
+3

ここでの問題は、図書館のような公共の環境と、個人情報を内部に持つオンラインのプロフィールです。私は解決策を考え出す必要があります。 –

+0

それにもかかわらず、あなたはこの質問に対するいくつかの良い答えを持っているようであり、正しい答えの1つを選ぶべきです。おそらくあなたは新しい質問を始めたいと思いますか? – bignose

3

あなたはまた、タブが閉じているときに検出したJavaScriptを書くとJavaScript

+3

どうすればいいですか? – thesecretmaster

+0

(sessionStorage.getItem( 'advertOnce')場合、私はこの $(ウィンドウ).scroll(関数(){ \t \tのような何かをしたイベント – Hammer

+0

をbeforeunloadするためのリスナーを追加します試してみてください!== '真'){ \t \t \t \t sessionStorage.setItem( 'advertOnce'、 '真'); \t \t \t \t initPopup(); \t \t \t \t \t} \t})。 –

2

セッションのWebストレージにクッキーを削除することができますが、代わりにクッキーを使用することができます。

1

私は回避策を見つけました。

私はASP.NETC#で働いています。 Loginページ以外のサイトのすべてのページに対してMaster Pageがあります。 Master Page Sever Page Load eventの場合、参照ページのUrlが表示され、サイトのルートが含まれているかどうかを確認します。Loginページにリダイレクトされていないため、そのページにはMaster Pageが表示されます。

これは、別のサイトからページを取得しようとした場合、またはブラウザのアドレスボックスにUrlを入力した場合に機能します。したがって、タブを閉じて別のタブから再入力するか、タブを再度開こうとすると、クッキーが削除されていないにもかかわらず、を経由せずにサイトに再ログインすることはできません。これは、タブを閉じずに、同じタブ内の異なるサイト間を移動しても機能します。

これは、コード

if (Request.UrlReferrer == null || !Request.UrlReferrer.AbsoluteUri.ToString().Contains("root")) 
     { 
      Response.Redirect("~/Account/Login.aspx"); 
     } 

サイト内から移動するとき、あなたはそれが開いて別のタブに、サイト内の別のページへのリンクを開く場合でも、何ら問題はありませんです。

さらにif句でセッションと認証Cookieを強制終了してから、Loginページにリダイレクトすることができます。

ユーザーが同じタブ内の別のサイトに移動してブラウザのback toボタンを押すと、これは機能しません。これはキャッシュで機能し、サーバーに要求を自動的に送信しないためです。

これは、タブを閉じる際にセッションまたは認証Cookieを強制終了しませんが、タブを閉じた後にログインせずにサイトに再入力するのを防ぐのに役立ちます。

関連する問題