2011-01-20 20 views
0

これは奇妙な問題で、何が起こっているのかわかりません。私はIIS7と.net 4.0を使用しています。ブラウザウィンドウを閉じるとAsp.Netセッション変数が破棄されませんか?

ブラウザが閉じられた後、セッションCookieがクライアントに残らないように見えました。別の奇妙なのは、IEを閉じてFireFoxを開くことができ、セッションもそこにあるということです。それはどうですか?私は自分の環境がどのように設定されているのかと考えています。 InProc用にセッションを設定し、IISでCookieを使用しています。 IIS7では何が違うのですか?

更新:私は自分のアプリケーションプールに統合モードを使用しています。 Sever2003上で実行されている.net 3.5とiis6を使って作成した古いサイトを見ました。私はサイトにログインすることができ、それは私のためのセッション変数を作成します。私はFireFoxに行き、同じサイトを開きます。ログインする必要があります(セッションが存在する場合、私のアプリケーションはあなたのprfileにあなたを連れて行きます)。 IEを終了してIEを再起動してから、自分のサイトに戻ったら、もう一度ログインする必要があります。 iis7と私の現在のアプリケーションで起こっていることは、かなり奇妙です。私のセッションの取り方の唯一の違いは、現在のハンドラをPageオブジェクトにキャストしているときに変数を取得していることです。(ページ)HttpContext.Current.Handler

更新: HttpContext.Current.Handlerを現在のページオブジェクトにキャストすることと関係しています。他のすべてのクラスが作成したUserセッションオブジェクトを取得するための中心点を参照できるように、プロパティを配置したい設定ファイルがあります。 HttpContext.Current.sessionは常にnullで、誰かがHttpContext.Current.Handlerのキャストを提案していました。セッションvaraibleが作成されているかどうかを確認し、そうでなければ作成する単純なページを作成しました。それから私は値を印刷します。ブラウザを閉じると、セッションは終了します。それで、それは働いています。このメッセージで私が元々持っていたコードは本当にバックボタンだったが、Andrewがそれを指摘してくれたことに感謝する必要はない。だから私はそれが明確になるまでHnadlerから引き出されたセッションがいつも利用可能であるのは明らかではないと思います。

+5

そのコードはCookieやセッションとは関係ありません。 –

+0

私が知っているのは、セシオンクッキーをクライアントに残さないようにするために "SEEMED"だったということでした。 – DDiVita

+0

私が述べたように、そのコードはCookieやセッションとはまったく関係ありません。この質問には全く意味がなく、削除する必要があります。 –

答えて

0

まあ、私は確かにこの答えを持っていないし、まだありませんでした。セッション変数をどのように設定して取得したかを変更しました。誰もがこれを見てくれてありがとう。

3

指定された量の非アクティブ(デフォルトは20分)後にセッションが終了します。 Httpはステートレスなので、サーバーはブラウザーを開いたままにしても、ブラウザー・ウィンドウを閉じるユーザーからの要求は出されません。

Session_OnEndは、InProcセッション状態に対してのみトリガされます。 IEとFirefoxがセッションを共有する唯一の方法は、セッションIDがURLに埋め込まれたcookielessセッションで、ブラウザ間でURLをコピーすることです。

+0

私はそれを認識しますが、私を信頼してください。サイトはプロセスでセットアップされており、URLには何も渡していません。 – DDiVita

+0

@ DDiVita - あなたの言うことが真実ならば、セッション状態が保持されていると誤解しなければなりません。 CognitronicがWebFormページに投稿したコードをブラウズしてみてください。あなたのセッション状態が放棄されているかどうかを確認してください。そうでなければ、ここではASP.NETの 'Session'状態については言及していません。 –

+0

システムからログアウトしてSession.Abandonを呼び出すと、セッションがクリアされます。両方のブラウザで。だから、私のログアウトイベントでは、私はセッションを呼び出します。IEの中から放棄する。私がFFに入ってリフレッシュすると、私はログインページに戻ります。だから、セッションは、私が慣れていない方法だけで、ウォークリングしています。私はそれを得ていない。 – DDiVita

1

あなたのセッションをクリアするには、これを試してみてください:HttpContext.Current.Handlerはいつも私のセッションに保持された理由

HttpContext.Current.Session.Clear(); 
HttpContext.Current.Response.Cookies.Clear(); 
+0

このコードは機能しますが、ここではそのコードを呼び出すことができるコンテキストがないため、この質問には役に立ちません。彼は、明示的に呼び出されるコードを含まないセッション放棄について話しています。 **しかし**このコードは、最初に問題となっているセッション状態かどうかを判断するのに役立ちます(そのコードがそれをクリアしていない場合は 'セッション'ではありません) –

関連する問題