我知道这是一个有点常见的问题,但是我还没有找到解决方案,因此,任何和所有的帮助或评论都非常感谢。
在 IHttpModule 实现中,在 Init 方法中我设置了一个处理程序,如下所示:
public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += new EventHandler(PreRequestHandlerExecute);
}
在 PreRequestHandlerExecute 方法中,对于任何 AJAX 调用,我都会收到“会话状态在此上下文中不可用”异常。
public void PostRequestHandlerExecute(Object application, EventArgs e)
{
HttpApplication app = application as HttpApplication;
var a = app.Session["csrf_token"];
或者,这样做会导致 NullReferenceException
var b = HttpContext.Current.Session["csrf_token"];
我正在尝试访问 Session 中的对象,该对象被放在那里并在非 ajax 调用期间在那里读取,没有任何问题。
问题具体是:是否有一个替代位置我可以或应该存储对象而不是 Session(除了 DB 或 Cookie)?
- 或者 -
有没有办法在 AJAX 请求期间通过某些配置或其他方式使 Session 可用?
- 或者 -
我只是在做一些我不应该在.Net中做的事情吗?我是本地 Java 人,.Net 概念对我来说是新的。
(如果有帮助,尝试实现“同步器令牌模式”以防止 aspx MVP 应用程序中的 CSRF)
非常感谢约翰