2014-06-23 57 views
2

在处理MVC项目时,用户将其凭据插入到登录表单中。我得到通过Web服务该用户的所有其他信息,我目前存储这样的:存储登录的用户数据

var result = client.getUser(gui); 
name = result.users.ElementAt(1).name; 
... 

... 

Session["userCode"] = userCode; 
Session["password"] = password; 
Session["userName"] = name; 
Session["userEmail"] = email; 
Session["creationDate"] = creationDate; 
Session["phoneNumber"] = phone; 

整个应用程序,只要我需要,我访问这些变量,如果我需要在他们的数据。由于我正在研究一个只有5页左右的新项目,因此即使项目有几十页,或者根本不应该使用会话变量,我是否会像这样访问它们。

有没有更好的方式来存储这个记录的用户数据?

回答

4

第一件事第一件事:永远不要在会话中存储用户密码 - 可怕的安全问题!

如果您刚刚构建应用程序,我强烈建议使用Identity framework。您可以在这里添加索赔到用户身份。声明列表就像字符串到字符串的字典。你可以随时查找索赔。

所以,你可以用自己的电话号码,电子邮件和创建日期要求添加到用户轻松,那么必须扩展方法来得到这个数据出来:

public static bool GetEmail(this ClaimsPrincipal principal) 
{ 
    if (principal == null) 
    { 
     return false; 
    } 

    var emailClaim = principal.Claims.SingleOrDefault(c => c.Type == "Email"); 

    if (emailClaim == null) 
    { 
     return String.Empty; 
    } 
    return emailClaim .Value; 
} 

,然后调用此方法是这样的:

ClaimsPrincipal.Current.GetEmail() 

索赔是在加密的cookie中关注用户。

UPD:您不应该在会话中存储密码,因为您在认证之后不应该需要它。一旦用户被验证并设置了auth cookie,您应该从内存中移除密码。如果在认证之后将它保留在会话中,则会出现会话数据出现的情况,我可以想到的一种情况是异常堆栈被转储到ELMAH中,并且ELMAH以纯文本形式公开会话变量。另一种情况是使用Glimpse时 - 它显示会话数据。

至于身份的社交方面 - 您可以放心地忽略所有这些,只用内部用户列表构建您的应用程序。我刚将我的一个项目从MembershipProvider迁移到Identity,并没有对社交认证进行任何依赖。

至于VS2010(为什么不升级?),Identity只依赖于Entity Framework 6.1,但不依赖于MVC或其他任何东西,因此应该没有问题,除非您使用的是Database First EF,在这种情况下,EF6.1工具可能不适用于VS2010。但是,我没有在VS2010中尝试过这一点,我建议你在VS2010中创建一个小型测试项目,以模拟与站点的身份集成。

+1

你说:“永远不要在会话中存储用户密码 - 可怕的安全问题!”。你能解释得更好吗?另外:它在你提供的链接上说:“用户通过输入他们在自己的应用程序中注册的用户名和密码登录的假设不再有效。”'和'“现代会员系统必须启用基于重定向的登录到Facebook,Twitter等身份验证提供程序。“我正在创建一个企业应用程序:社交部分对我来说毫无用处。我应该仍然在寻找'asp.net Identity'吗?此外,我正在使用Visual Studio 2010 – chiapa

+1

@chiapa刚刚添加了您的问题的答案作为编辑我的答案。 – trailmax

相关问题