我遇到了GenericHandler和anonymousIdentification的问题。ASP.NET通用处理程序和会话
基本上,如果在Web配置中打开<anonymousIdentification enabled="true" />
,则无论何时向服务器发送JQuery GET/POST请求,该请求都将在新用户和新用户会话下执行。
有没有办法缓解这种情况?我需要访问当前用户的会话变量......这真令人沮丧!
我遇到了GenericHandler和anonymousIdentification的问题。ASP.NET通用处理程序和会话
基本上,如果在Web配置中打开<anonymousIdentification enabled="true" />
,则无论何时向服务器发送JQuery GET/POST请求,该请求都将在新用户和新用户会话下执行。
有没有办法缓解这种情况?我需要访问当前用户的会话变量......这真令人沮丧!
通用处理程序必须实现IReadOnlySessionState
接口才能访问会话变量。如果您还需要编写会话变量,请执行IRequiresSessionState
。
我建议在Web浏览器中启用开发者模式下的网络选项卡。 然后检查AJAX发送哪个cookie(如果有的话)。
如果您没有看到任何cookie,这意味着浏览器没有得到任何会话,因此您应该确保(如Josh所述)继承正确的界面并访问cookie。 (Don'f忘记使用System.Web.SessionState)
为了生成cookie时,访问会话对象的会话ID:
string sesId = context.Session.SessionID;
以前你写什么反应。
您可以使用此:
public class Handler :
IHttpHandler,
System.Web.SessionState.IReadOnlySessionState
落实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");
}
}
我没有检查,但我认为,如果你发送一个jQuery GET REQ。从客户端然后它在当前用户上下文处理..检查与fiddler是ASP.net会话cookie正常和jQuery请求相同 – 2011-02-03 17:34:56
因此,如果你关闭anonmyous ID它的作品?你在使用Forms auth吗?你可以关闭在web.config中的特定路径的匿名? – jcolebrand 2011-02-03 17:37:19
我会尝试看看这是否可以使用@drachenstern。你错了@Shekhar_Pro。我将用户数据存储在会话中;一个值是UserRegistratinoState。如果我来自用户刚刚注册了会话中的枚举值的页面是UserRegistrationState.Registered。我已经证实了这一点。但是,当我从另一页上的js调用处理程序时,处理程序中的第一行代码会检查该会话变量。如果变量不存在,它会自动返回UserRegistrationState.Anonymous。我认为假设来自JQuery的Get请求在新用户下执行是安全的。 – bleepzter 2011-02-03 17:52:20