3

我有一个 ASP.NET 应用程序,它使用自定义 MembershipProvider 来允许用户登录并获得对某些功能的访问权限。MembershipProvider 使用 ASP.NET 的内置表单身份验证来设置 cookie 并跟踪用户是谁。

既然我已经让用户登录了,那么为他们的会话存储用户特定信息的最佳方式是什么?过去我只使用过会话变量,即Session["ReputationLevel"] = "4230";(我的应用程序实际上没有信誉级别变量,这只是一个示例)。这仍然是使用 MembershipProvider 的最佳方式吗?以某种方式将此信息构建到提供者本身或自定义 MembershipUser 实现中会更好吗?如果我将所有内容都保留在会话中,我想当 MembershipProvider 指示用户已注销时我必须放弃会话......?

对不起,如果这个问题含糊不清。在过去的几年中,我主要从事 ColdFusion 开发,但我对这些 ASP.NET 技术中的一些技术还是有点陌生​​。我认为 MembershipProvider 功能会处理我需要的一切,但我现在看到我的实现中仍然存在一些漏洞(在这种情况下,存储附加数据的位置)。

这个问题似乎很相似,但似乎并不是我要问的。

4

2 回答 2

2

If you want to persist the information beyond the session, it's probably best to store it by user in your database. There are several ways to do this:

  • You can roll your own by manually storing and reading in data from a SQL table as needed -- possibly using the runtime cache to save from hitting the db on every request.
  • You can extend MemberShipUser in your custom membership provider and add the properties to it. Here is a walkthrough...
  • You can use ASP.NET Profiles, which might be the easiest way to go and it supports storing data for unique unauthenticated users as well. Here's a walkthrough for profiles, although there are several more out there.
于 2011-03-11T17:00:07.810 回答
1

我不确定你会怎么做,但我想你可以扩展会员资格提供者来做到这一点。但就个人而言,我发现普通会话工作得很好。我唯一要做的就是将它们的功能包装在一组共享函数中。所以你的例子是:

static string GetUserReputation()
{
   return Session["Reputation"].ToString();
}

然后打电话GetUserReputation

于 2011-03-10T16:51:06.303 回答