[解決済み] 現在のASP.NETセッションがNULLの場合、どうすればよいですか?
質問
私のWebアプリケーションでは、セッション変数を読み取るために、次のようなことを行っています。
if (HttpContext.Current.Session != null && HttpContext.Current.Session["MyVariable"] != null)
{
string myVariable= (string)HttpContext.Current.Session["MyVariable"];
}
HttpContext.Current.Session["MyVariable"] が null であることを確認することが重要であることは理解できますが(変数がまだセッションに保存されていない可能性や、さまざまな理由でセッションがリセットされた可能性があります)、なぜ、その後に
HttpContext.Current.Session
が NULL であるかどうかを確認する必要があるのでしょうか?
私の理解では、セッションはASP.NETによって自動的に作成されるため、HttpContext.Current.Sessionは決してNULLにならないはずです。この仮定は正しいですか? それがNULLである可能性がある場合、私はそれに何かを格納する前にそれをチェックする必要があることを意味します。
if (HttpContext.Current.Session != null)
{
HttpContext.Current.Session["MyVariable"]="Test";
}
else
{
// What should be done in this case (if session is null)?
// Is it possible to force the session to be created if it doesn't exist?
}
どのように解決するのですか?
はい、SessionオブジェクトはNULLかもしれませんが、それは特定の状況においてのみであり、めったに遭遇することはありません。
- を無効にしている場合 SessionState http モジュール を無効にした場合、セッションを完全に無効にする
- の前にコードが実行された場合 HttpApplication.AcquireRequestState イベントの前に実行された場合。
- あなたのコードは IHttpHandler を指定しない場合、そのコードは IRequiresSessionState または IReadOnlySessionState インターフェイスを使用します。
ページにしかコードがない場合は、これに遭遇することはないでしょう。私の ASP .NET コードのほとんどは、NULL を繰り返しチェックすることなく Session を使用しています。しかし、IHttpModule を開発している場合、または ASP .NET の細かい部分にまで踏み込んでいる場合は、考えなければならないことがあります。
編集
コメントへの回答です。セッション状態が利用可能かどうかは、リクエストに対して AcquireRequestState イベントが実行されているかどうかに依存します。これは、セッション状態モジュールがセッション Cookie を読み取り、適切なセッション変数のセットを見つけることによって、仕事をする場所です。
AcquireRequestState は、制御がページに渡される前に実行されます。そのため、静的クラスを含む他の機能をページから呼び出している場合は、問題ないでしょう。
起動時に初期化ロジックを行うクラスがある場合、例えば Application_Start イベントや静的コンストラクタを使用すると、セッション状態が利用できないことがあります。すべては、現在の要求があり、AcquireRequestState が実行されているかどうかにかかっています。
また、クライアントがクッキーを無効にしている場合、Sessionオブジェクトはまだ利用可能ですが、次のリクエストで、ユーザーは新しい空のSessionで返されます。これは、クライアントがまだ持っていない場合、セッションのステートバッグが与えられるからです。クライアントがセッションクッキーを転送しない場合、同じクライアントとして識別する方法がないため、何度も新しいセッションを渡されることになります。
関連
-
ASP.NET Core Dependency Injectionフレームワークの活用
-
ASP.NET Core ディペンデンシーインジェクションの詳細
-
Application_End イベントをブロックする解決策
-
[解決済み] ASP.NET WebサイトとASP.NET Webアプリケーションのどちらを選ぶか?
-
[解決済み] ASP.NET MVCコントローラは、Imageを返すことができますか?
-
[解決済み] データ入力後に文字列をトリミングする最適な方法。モデルバインダーをカスタムで作成した方が良いですか?
-
[解決済み] .Netが間違った参照アセンブリのバージョンを選択する
-
[解決済み] Razor _layout.cshtml のファイル名の先頭にアンダースコアがあるのはなぜですか?
-
[解決済み] フレームワークのランタイムターゲットが見つからない .NETCoreApp=v1 互換ランタイムの1つと互換性がある
-
[解決済み] ASP.NET_SessionId + OWIN Cookieがブラウザに送信されない。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
pythonでpillowをインストールする3つの方法
-
NET6新機能 新構造体の最適化
-
ASP.NET CoreでCAPの取引詳細を自動で有効にする
-
認証プロセスの記録にjwtを使用したネット
-
ネットパフォーマンスチューニング - ArrayPool 詳細
-
[解決済み】ASP.NET web.config: configSourceとファイル属性の比較
-
[解決済み】ASP.NET Web APIを使用したセッションへのアクセス
-
[解決済み] イベントログへの書き込み時にSystem.Security.SecurityExceptionが発生する。
-
[解決済み] ASP.NETの一時ファイルのクリーンアップ
-
[解決済み] WatiNかSeleniumか?[クローズド]