我从php进入ASP.NET,所以我问我的问题的原因是因为它与应用程序的工作方式和处理请求完全不同。
好吧,我有一个带有用户信用卡的存在表,例如: id,登录,密码(sha散列),电子邮件,电话,房间
我已经构建了自定义成员资格提供程序,因此它可以处理我自己的数据库身份验证架构。
现在我很困惑,因为User.Identity.Name只包含用户的登录,但不包含完整的对象(我使用linq2sql与数据库进行通信,我需要在其中使用User对象)。
在php应用程序中我只是将用户对象存储在Auth类(或其他一些)的某个静态方法中,但是在ASP.NET MVC中我不能这样做,因为静态成员在所有请求和永久性共享,而不是生命只在当前请求中(就像在php中一样)。
所以我的问题是:我应该如何以及在何处检索和存储linq2sql用户对象以在当前和当前请求中使用它? (在请求成功处理后,我希望它将从内存中处理,并在下一个请求中再次创建)。
或者我完全错误的方式?
答案 0 :(得分:1)
如果您已实现MembershipProvider,那么您知道它有一个GetUser方法,它根据用户名获取MembershipUser对象。
在项目的任何页面中,如果运行Membership.GetUser(),它将在当前启用的身份验证提供程序中运行GetUser(用户名)方法。在一个简单的基本解决方案中,此调用将转到数据库,并在每次访问时获取用户详细信息。
我在项目中所做的是将当前用户存储在Session变量中。这样,此用户的当前浏览器会话将存储用户对象。它很简单,而且很好,因为ASP.NET身份验证基于当前会话。
有一点需要注意 - 每次用户注销时都应该清除该会话变量。在我的情况下,我使用Session.Abandon()只是为了确保。除此之外 - 这是我到目前为止使用的方法而且效果很好!
答案 1 :(得分:0)
我建议创建一个自定义的IPrincipal和IIdentity类,它们也可以与您的成员资格提供者进行交互并设置on the Thread。这样,身份随着执行而移动,这就是它通常的工作方式。
This article over at MSDN describes the process fairly well.