我对 GenericHandler 和anonymousIdentification 有疑问。
基本上,如果<anonymousIdentification enabled="true" />
在 web 配置中打开,每当将 JQuery GET/POST 请求发送到服务器时,该请求都会在新用户和新用户会话下执行。
有没有办法减轻这种情况?我需要访问当前用户的会话变量……真是令人沮丧!
我对 GenericHandler 和anonymousIdentification 有疑问。
基本上,如果<anonymousIdentification enabled="true" />
在 web 配置中打开,每当将 JQuery GET/POST 请求发送到服务器时,该请求都会在新用户和新用户会话下执行。
有没有办法减轻这种情况?我需要访问当前用户的会话变量……真是令人沮丧!
通用处理程序必须实现IReadOnlySessionState
访问会话变量的接口。如果您还需要编写会话变量,请实现IRequiresSessionState
.
实现System.Web.SessionState.IRequiresSessionState
接口:
public class Handler : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
context.Session["StackOverflow"] = "overflowing";
context.Response.Redirect("~/AnotherPage.aspx");
}
}
你可以使用这个:
public class Handler :
IHttpHandler,
System.Web.SessionState.IReadOnlySessionState
我建议您在网络浏览器中启用开发人员模式下的网络选项卡。然后在 AJAX 中检查发送了哪个 cookie(如果有)。
如果您没有看到任何 cookie,则意味着浏览器没有获得任何会话,因此您应该确保(如 Josh 所述)继承正确的接口并访问 cookie。(不要忘记使用 System.Web.SessionState)
要生成 cookie,请访问会话对象的 sessionID:
string sesId = context.Session.SessionID;
在您向响应写入任何内容之前。