0

Async Ajax リクエストが必要なため、セッション状態を無効にする必要があります。Web アプリは ASP.Net 4 - MVC 2 に基づいています。

私は知っ[SessionState(SessionStateBehavior.Disabled)]ていますが、MVC 3+で利用できます。

次のメソッドを使用して、特定の HTTP リクエストをセッションレス HTTPContext [source]にルーティングしています。

public class CustomRouteHandler : IRouteHandler
    {
        public System.Web.IHttpHandler GetHttpHandler(RequestContext requestContext)
        {
            requestContext.HttpContext.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.ReadOnly);
            return new MvcHandler(requestContext);
        }
    }

そして Global.asax で:

routes.MapRoute( _
          Nothing, _
          "ajaxrequest/{id}", _
          New With {.controller = "AjaxEngine", .action = "Index", .id = UrlParameter.Optional}, _
             New SessionLessRouteHandler()
        )

結果?コードは正しくコンパイルされ、実行時にエラーは発生しません。ただし、何も変更されず、すべての単一の Ajax リクエストの HTTP ヘッダーに、新しいセッションで新しいセット Cookie が表示されます。たとえば、ブラウザが 100 個の Ajax リクエストをリクエストすると、リクエストごとに新しいセッションが生成されます。また、静的な Ajax リクエストにセッションは必要ありません。Chrome Network Monitor によって診断された各 Ajax リクエストに、次の行が表示されます。

Set-Cookie:ASP.NET_SessionId=xlgxdzdxdeilws23prjns3cv; domain=mydomain.com; path=/

なぜそれが機能しないのですか?また、リクエストに対して新しいセッションを作成しないようにするにはどうすればよいですか?

4

1 に答える 1

0

手違いによるものでroutes.MapRoute、新規の方は受け付けますIRouteHandlerが不適切です。routes.AddGlobal.asaxの代わりに使用して RouteHandler を設定する必要がありroutes.MapRouteます。

routes.Add(Nothing, New Route("ajaxrequest/{id}", New 
    RouteValueDictionary(New With { _
    Key .controller = "AjaxEngine", _
    Key .action = "Index", _
    Key .id = UrlParameter.Optional _
    }), New SessionLessRouteHandler()))

注: ReadOnly セッション状態を使用することで、Cookie の設定が続行されます。Disabled定義した RouteHandler クラスのように設定する必要があります。

于 2015-03-16T01:20:35.913 に答える