【发布时间】:2011-05-10 09:20:50
【问题描述】:
我有一个正在使用的视图
Session["Something"] = 1;
我在一个类库项目中有一个类,它试图从会话中获取这个值
HttpContext.Current.Session["Something"]
但它会返回null。
public ActionResult Index()
{
Session["Something"] = 1;
var fromLib = (new MyLibClass()).GetSession("Something"); // null
var fromHere = Session["Something"]; // 1
}
// Class library project
public object GetSession(string key)
{
return HttpContext.Current.Session[key];
}
如何从会话中获取价值?或者有没有办法保存一个值并在另一个地方检索(没有数据库或系统文件)
【问题讨论】:
-
请问
GetSession()的实际意义是什么?如果您可以直接从HttpContext.Current.Session()访问,则无需自定义方法来访问它。 -
@rockin 重点是用一个非常简单的例子来说明问题所在。
-
在 Web 应用程序之外使用 session 是不好的做法,主要是因为它使单元测试变得非常困难。如果这只是一个示例,请考虑说明您实际尝试执行的操作,以便我们提出替代方案,例如在您的类库中缓存,或将“会话”逻辑移动到 Web 层的某个位置。
-
@RPM 当我使用 oAuth 登录 Facebook/Twitter 时,我将令牌存储在会话中,并创建了一个属性来访问会话并返回令牌。你有替代方案吗?对于 Twitter,我可以保存在数据库中,因为它永不过期,但对于 Facebook,我需要存储在会话或 cookie 中,我猜...
-
这很有趣。我也在使用 Facebook OAuth 并存储令牌。但是我使用cookies(因为我有一些需要访问它的客户端东西)。但诀窍是,此代码在 Web 应用程序的操作过滤器中。没有类库。我使用 Facebook C# SDK,但将令牌存储在 cookie 中的代码是一种处理 PostAuthorize URL(Oauth 交换)的操作方法。你不能这样做吗?由于 session/cookies 对于 http 上下文是静态的,因此在您的 Web 应用程序中创建一个公共静态类,该类具有用于令牌的 getter/setter。为什么它需要在你的类库中?
标签: c# asp.net asp.net-mvc session