ASP.NET 通用处理程序和会话
Posted
技术标签:
【中文标题】ASP.NET 通用处理程序和会话【英文标题】:ASP.NET Generic Handlers & Session 【发布时间】:2011-06-20 20:08:57 【问题描述】:我对 GenericHandler 和 anonymousIdentification 有疑问。
基本上,如果<anonymousIdentification enabled="true" />
在 web 配置中打开,则每当向服务器发送 JQuery GET/POST 请求时,该请求都会在新用户和新用户会话下执行。
有没有办法缓解这种情况?我需要访问当前用户的会话变量...真是令人沮丧!
【问题讨论】:
我没有检查它,但我想如果你发送一个 jQuery GET 请求。从客户端然后它在当前用户上下文中处理.. 用提琴手检查正常和 jquery 请求的 ASP.net 会话 cookie 是否相同 所以如果你关闭匿名 ID 是否有效?您使用的是表单身份验证吗?您可以在 web.config 中关闭该特定路径的匿名功能吗? 我会尝试看看这是否有效@drachenstern。你错了@Shekhar_Pro。我将用户数据存储在会话中;一个值是 UserRegistratinoState。如果我来自用户刚刚注册的页面,则会话中的枚举值为 UserRegistrationState.Registered。我已经验证了这一点。但是,当我在另一个页面上从 js 调用处理程序时,处理程序中的第一行代码会检查该会话变量。如果变量不存在,它会自动返回 UserRegistrationState.Anonymous。我认为可以安全地假设来自 JQuery 的 Get 请求是在新用户下执行的。 发生的事情是他们没有将 cookie 发送回服务器。 那么我该如何缓解呢?我要发送哪个 cookie?以及如何发送? 【参考方案1】:通用处理程序必须实现IReadOnlySessionState
接口才能访问会话变量。如果还需要写会话变量,实现IRequiresSessionState
。
【讨论】:
我马上试试这个。谢谢@Josh Stodola 应为:public class MemberHandler:IHttpHandler,IRequiresSessionState 我遇到的问题是,如果对处理程序的请求是第一个到网站的请求(没有实际会话 ID),处理程序没有发回会话 cookie,我认为当IReadOnlySessionState
派生自“IRequireSessionState”时那就够了。但我真的不得不明确地使用IRequireSessionState
。谢谢你的帖子。【参考方案2】:
实现System.Web.SessionState.IRequiresSessionState
接口:
public class Handler : IHttpHandler, System.Web.SessionState.IRequiresSessionState
public void ProcessRequest(HttpContext context)
context.Session["***"] = "overflowing";
context.Response.Redirect("~/AnotherPage.aspx");
【讨论】:
我想在通用处理程序中获取会话值,以根据我存储在会话中的主键上传图像,我正在使用 jquery 图像上传插件,它绑定了文档上的所有属性准备就绪。我在我的处理程序代码中使用了 iRequiresSessionState 但我仍然无法访问会话值。会话密钥仍为 0。谁能告诉我这个?【参考方案3】:你可以用这个:
public class Handler :
IHttpHandler,
System.Web.SessionState.IReadOnlySessionState
【讨论】:
【参考方案4】:我建议您在网络浏览器中启用开发者模式下的网络选项卡。 然后在 AJAX 中检查发送了哪个 cookie(如果有)。
如果您没有看到任何 cookie,则意味着浏览器没有获得任何会话,因此您应该确保(如 Josh 所述)继承正确的接口并访问 cookie。 (别忘了使用 System.Web.SessionState)
为了生成cookie,访问会话对象的sessionID:
string sesId = context.Session.SessionID;
在之前写任何东西到响应中。
【讨论】:
-1 拥有无 cookie 会话状态是非常可能和合理的,并且访问标识符当然不会“生成” cookie以上是关于ASP.NET 通用处理程序和会话的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET 中的 FluentNHibernate 会话管理
使用 SignalR、WCF 双工服务和 ASP.Net 通用处理程序向客户端推送通知?
支持 JSONP 的 ASP.NET 通用 HTTP 处理程序 (.ashx)