2010-04-18 99 views
0

我从php进入ASP.NET,所以我问我的问题的原因是因为它是应用程序如何工作和处理请求的完全不同的性质。认证模型 - 最佳实践

好,我有一个存在的表与用户creditians,如: ID,登录名,密码(SHA哈希),电子邮件,电话房间

我所建的自定义成员资格提供这样它可以处理我自己的数据库认证模式。

现在我很困惑,因为User.Identity.Name仅包含用户的登录名,但不包含完整的对象(我使用linq2sql与数据库进行通信,并且需要在其中使用User对象)。

在php应用程序我只是存储用户对象在一些静态方法在Auth类(或其他),但在ASP.NET MVC我不能这样做,因为静态成员是共享所有请求和永久的,而不是只在当前的请求内生效(如在php中)。

所以我的问题是:我应该如何以及在哪里检索并存储linq2sql用户对象以便在当前请求和当前请求中使用它? (在请求处理成功后,我期望它将从内存中丢弃,并且下一个请求将再次创建)。

还是我跟着完全错误的方式?

回答

1

如果你已经实现了MembershipProvider,那么你知道它有一个GetUser方法,它获得一个基于用户名的MembershipUser对象。

在项目中的任何页面上,如果运行Membership.GetUser(),它将在当前启用的身份验证提供程序中运行GetUser(用户名)方法。在一个简单的基本解决方案中,这个调用将进入数据库并在每次访问时获取用户详细信息。

我在我的项目中所做的是将当前用户存储在Session变量中。这样,此用户的当前浏览器会话将存储用户对象。这很简单,而且很好,因为ASP.NET身份验证基于当前会话。

有一点需要注意 - 每次用户注销时,都应清除会话变量。在我的情况下,我使用Session.Abandon()来确保。除此之外 - 这是我迄今为止使用的方法,它效果很好!