2011-06-11 145 views
1

以下是手头的问题:我使用Razor开发了一个ASP.NET MVC3应用程序。我还实现了一个自定义成员资格提供程序并重写了ValidateUser()方法。在内部,我查询了我的数据库并获得了除密码验证以外的大量用户信息。如何存储其他用户信息?

目前,我正在将此信息(即companyId)推送到某个类的静态属性。这工作,我可以在我的应用程序中显示/使用这些信息。用户关闭其浏览器选项卡时出现问题。重新打开应用程序后,用户通过cookie进行身份验证,因此他们不需要重新登录;但是,这些静态变量会被吹走。

所以男人和女孩,你会如何克服这个问题?我应该将额外的信息附加到会话cookie吗?或者更好的解决方案?

+2

@Chase,配置文件提供程序应该用于此(就像会员提供程序用于帐户)。为什么不工作? – bzlm 2011-06-11 14:22:20

+0

这些“静态变量”是在会话中还是在应用程序级别? – 2011-06-11 14:29:15

+0

Microsoft建议不要将ProfileProvider用于新的ASP.NET/MVC应用程序:http://connect.microsoft.com/VisualStudio/feedback/details/595053/add-support-for-the-sql-table-profile-provider- in-asp-net-4-web-applications – 2011-06-11 14:44:18

回答

3

在ASP.NET中使用ProfileProvider

+0

我之前的评论错了!错误我的意思是,测试后,请忽略;-) – 2011-06-11 15:39:00

0

对于应用程序级变量,它们将受到应用程序池回收以及与从头开始的用户相似的类似“模拟”重新启动。这些变量应该完全独立于用户的使用,并且应该能够被轻松地重新创建。如果你的变量是依赖于用户的,或者在没有某种外部干预的情况下无法轻松恢复,那么你肯定会需要一种不同的存储方法。

如果数据是用户特定的,将它存储在会话cookie中可能是最好的主意。如果数据与用户相关,但分支多个用户,则应将其存储在某个数据库或平面文件中。如果数据与用户无关,那么它应该只在数据库或配置文件中。

+0

好棒,所以我应该搜索存储会话信息并覆盖它们的方法,是吗? – 2011-06-11 15:28:14

+0

会话不是最好的解决方案,因为它不能很好地扩展 – 2011-08-18 14:10:23

+0

@Jenea:我不确定你的意思是不是很好。应该扩大规模,应该如何扩大规模? – 2011-08-18 14:16:01