2011-02-03 90 views
17

我遇到了GenericHandler和anonymousIdentification的问题。ASP.NET通用处理程序和会话

基本上,如果在Web配置中打开<anonymousIdentification enabled="true" />,则无论何时向服务器发送JQuery GET/POST请求,该请求都将在新用户和新用户会话下执行。

有没有办法缓解这种情况?我需要访问当前用户的会话变量......这真令人沮丧!

+0

我没有检查,但我认为,如果你发送一个jQuery GET REQ。从客户端然后它在当前用户上下文处理..检查与fiddler是ASP.net会话cookie正常和jQuery请求相同 – 2011-02-03 17:34:56

+0

因此,如果你关闭anonmyous ID它的作品?你在使用Forms auth吗?你可以关闭在web.config中的特定路径的匿名? – jcolebrand 2011-02-03 17:37:19

+0

我会尝试看看这是否可以使用@drachenstern。你错了@Shekhar_Pro。我将用户数据存储在会话中;一个值是UserRegistratinoState。如果我来自用户刚刚注册了会话中的枚举值的页面是UserRegistrationState.Registered。我已经证实了这一点。但是,当我从另一页上的js调用处理程序时,处理程序中的第一行代码会检查该会话变量。如果变量不存在,它会自动返回UserRegistrationState.Anonymous。我认为假设来自JQuery的Get请求在新用户下执行是安全的。 – bleepzter 2011-02-03 17:52:20

回答

-2

我建议在Web浏览器中启用开发者模式下的网络选项卡。 然后检查AJAX发送哪个cookie(如果有的话)。

如果您没有看到任何cookie,这意味着浏览器没有得到任何会话,因此您应该确保(如Josh所述)继承正确的界面并访问cookie。 (Don'f忘记使用System.Web.SessionState)

为了生成cookie时,访问会话对象的会话ID:

string sesId = context.Session.SessionID; 

以前你写什么反应。

1

您可以使用此:

public class Handler : 
    IHttpHandler, 
    System.Web.SessionState.IReadOnlySessionState 
11

落实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");  
    } 

}