【发布时间】:2012-03-17 16:07:59
【问题描述】:
问题:
通常,访问会话对象的方式如下:
Session["foo"] = "bar";
我在它上面写了一个包装器,它是通用的,它检查会话是否已过期,如果是,则抛出 SessionExpiredException。
为了使用我的会话访问权限,我必须像这样通过我的班级访问会话
WebApplications.SessionAccess.Set<string>("foo", "bar");
现在,很明显,尽管存在 SessionAccess 类,但仍然可以通过普通会话对象访问会话。这是不可取的,此外,我想稍后将它包含在一个使用普通会话编写的更大的旧项目中,这意味着我必须用我的替换所有对会话的调用(一个低千的数字)包装。
有没有办法用我自己的方法覆盖 System.Web.HttpSessionStateBase.Controller.Session - 属性?
问题是,没有在 web.config 中定义的自定义会话处理程序,因为有时已经有一个用于使用数据库进行会话的处理程序(仍然可以在 Global.asax 中初始化一个模块)。
SessionTimeout 上的那些 NULL-Reference 异常 YSOD 非常令人不安。
如果可能的话,一个适用于经典 ASP.NET 网络表单以及 MVC 的解决方案。
【问题讨论】:
-
它的覆盖,也,不明白你的问题的重点。
-
嗯,顺便说一句,这就像 .NET 的弯路/函数拦截的理想应用。我可以使用鼹鼠框架。
-
你真的需要这个吗?将您的辅助方法作为扩展方法添加到 HttpSession 类怎么样?
-
您可以覆盖 Session 属性,但不能用您自己的方法替换它,因为它没有相同的签名:您的方法是通用的。
-
@Darin Dimitro:是的,但我总是可以围绕它写一个包装器 SessionAccess.Set
标签: c# asp.net asp.net-mvc asp.net-mvc-3 session