次の簡単なテストを実施しました。
- web.config には、`sessionState timeout=40 mode=InProc` があります。
- ページタグに「EnableSessionState = "ReadOnly"」が設定された空のページ
- コードビハインド:
protected void Page_Load(object sender, EventArgs e)
{
if (Session["dt"] == null)
Session["dt"] = DateTime.Now;
Session["dt"] = ((DateTime)Session["dt"]).AddYears(1);
Response.Write(Session["dt"].ToString());
}
同時ポストバックの結果は次のようになります。
1- 2015 年 11 月 13 日 10:00:00 2- 2016 年 11 月 13 日 10:00:00 3- 2017 年 11 月 13 日 10:00:00 4- 2018 年 11 月 13 日 10:00:00 5- 13/11/2019 10:00:00 6- 13/11/2020 10:00:00 ...
これは、セッション変数が更新されていることを明確に示しています。MSDN では、次を見つけることができます: http://msdn.microsoft.com/en-us/library/ms178581(v=vs.100).aspx
セッション状態モードをオフに設定すると、アプリケーションのセッション状態を無効にできます。アプリケーションの特定のページのみのセッション状態を無効にする場合は、@ Page ディレクティブの EnableSessionState 値を false に設定できます。EnableSessionState 値を ReadOnly に設定して、セッション変数への読み取り専用アクセスを提供することもできます。
アプリケーションのほぼすべてのページで読み取り/書き込み操作を実行します。ただし、これにより、同じクライアントに対して 2 つの http 要求を同時に実行できなくなります。最初のリクエストは、サーバーが 2 番目のリクエストを処理するまで終了する必要があります。いくつかの調査の後、明らかにセッションの排他ロックが原因でした。好奇心のために、セッション状態を ReadOnly に設定しようとしましたが、排他ロックが定義されていない編集可能のようです。
質問:
1- Readonly は Readonly を意味しますか (したがって、asp にはバグがあります)、それとも別のものですか?
2- セッションが ReadOnly 状態で編集可能に見える限り、心配することはありますか? 本番環境でこのまま使用しても安全だと思いますか?
ありがとう