2

ASP.NETでのセッションのライフサイクルについて少し混乱しています。これが私のテストケースです。

ユーザーがログインし、いくつかの情報をセッション変数(たとえばSession["bob"]="bob")に保存してから、「IISリセット」を実行します。ユーザーはまだログインしていますが、セッションデータはログインしていますnull(たとえばSession["bob"].ToString()、をスローしNullReferenceExceptionます。

セッションデータはまだ残っていると思いました。ユーザーをログアウトする以外にできることはありますか?ユーザーがまだログインしている限り、セッションデータは存在すると予想していました。

良いリンクがあれば、何が起こっているのかを理解し、実際の問題についての助けをいただければ幸いです。私はこれをグーグルで検索しようとしましたが、私が望むものを得る方法で質問を組み立てることができませんでした。

4

2 に答える 2

7

表示されている動作(SessionコンテンツがIISリセットイベントに耐えられない場合)は、セッション値が格納されている場所が原因です。既定では、これらの値は、ASP.NETWebサイトを実行するプログラムであるASP.NET「ワーカープロセス」のメモリ内に格納されます。

「IISリセット」を実行すると、ASP.NETワーカープロセスを含むIISサーバー全体がシャットダウンされます。これは、セッションの内容がメモリから削除されることを意味します。ブラウザに保存されているCookieによって制御されているため、ユーザーはまだログインしているように見えます。Cookieがまだ有効な場合、ログインは有効です。

セッションの状態をIISのリセット(またはASP.NETワーカープロセスを再起動させるその他の問題)後も存続させたい場合は、セッションオブジェクトを別の場所に保存する必要があります。これは、さまざまなセッションストレージの「モード」を使用することにより、ASP.NETによって完全にサポートされます。それらについては、MSDNの記事「Session-StateModes」を参照してください。

セッションの一般的な概要については、MSDNの「 ASP.NETセッション状態の概要」の記事を確認してください。

于 2011-06-24T00:46:27.057 に答える
0

ええ、その権利ですが、いつかそれが起こり、その時点でセッションが適切に削除されません

あなたは次のようなセッションをチェックする必要があります

If Session("username") = nothing then

Response.redirect("~/default.aspx")

End if
于 2011-05-05T16:30:04.340 に答える