33

コントローラーに属性がある場合、SessionStateBehavior.ReadOnlyこのコントローラー内のセッション変数を変更することはできませんが、値を変更することはできます。

私はこのコードを試します

 [SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
    public class GLobalController : Controller
    {
      public  ActionResult Index()
        {
            Session["xxx"] = DateTime.Now.ToString();
            return View();
        }
4

3 に答える 3

31

MVC 3+ での読み取り専用セッションへの書き込みを参照してください。

その投稿は、動作に一貫性がないと主張しています。ReadOnlyを使用して、コントローラーのセッションに確実に書き込むことができます。

私はそれを次のように扱います:

  • Required は、Session の排他ロックを要求していることを意味します (つまり、同じ sessionID に対する要求の並列処理はありません)。
  • ReadOnly は、Session で非排他的ロックを要求していることを意味します (つまり、要求は排他的ロックでの要求が完了するまで待機する必要がありますが、非排他的ロックでの要求を並行して処理できます。ただし、確認するのはユーザー次第です。あなたのコードがセッションに書き込まないこと.フレームワークによって必ずしも強制されるわけではありません)

    これはhttp://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatebehavior.aspxに反していることに気づきました

    リクエストに対して読み取り専用のセッション状態が有効になっています。これは、セッション状態を更新できないことを意味します。

    しかし、実際にはいくつかのシナリオでセッション状態を更新できるようです。

  • 于 2012-09-05T01:26:59.893 に答える
    13

    ASP.NETのセッション状態エンジンを設計および開発したPatrick Y. Ng ( Microsoft のソフトウェア エンジニア) によると:

    EnableSessionState が ReadOnly としてマークされていても、InProc 状態では、ユーザーはセッションを変更できます。唯一の違いは、リクエスト中にセッションがロックされないことです。この制限は仕様によるものです。MSDN に記載されていないことをお詫び申し上げます。

    この投稿には、セッション状態に関するさらに有用な情報があります。本当に読む価値があります。

    于 2018-08-03T08:26:47.820 に答える