2011-05-18 89 views
0

我正在开发一个基本上是数据库代理的ASP.NET MVC 3应用程序。要登录,用户必须提供他们的数据库用户和名称。 (我知道使用数据库用户作为应用程序用户并不是一个好主意,但我没有设计数据库,所以不要责怪我。)以保持会话状态数据的方式与认证Cookie保持联系

当我的用户登录时,我想存储在会话变量中的用户名和密码:

Session["UserID"] = TheConnectionStringBuilder.UserID; 
Session["Password"] = TheConnectionStringBuilder.Password; 

然而,会话状态不固定绑定到身份验证cookie,并稍后可能会造成问题。有没有办法保持会话状态数据的方式,以保持与身份验证cookie的关联?

+0

为什么不将该数据存储在用户的身份验证cookie中。在任何地方存储普通密码都很不好,但用户的cookie至少要加密。这样你可以避免会话劫持问题... – automagic 2011-05-18 22:37:15

+0

你认为你可能遇到什么问题? – Kev 2011-05-18 22:38:03

+0

@詹姆斯康奈尔:我该怎么做? – pyon 2011-05-18 22:38:08

回答

1

其中一种方式可能是使用配置将会话状态超时与身份验证超时匹配。例如,

<authentication mode="Forms"> 
<forms timeout="30" /> 
</authentication> 

<sessionState timeout="31" /> 

另一种方法是将存储凭证到一些持久性存储(如文件)标记有一些生成的密钥,然后保持身份验证Cookie此键。但是,我觉得这是一个关于做事的方式,我宁愿采用会话方式。

由于某种原因,如果您在会话中找不到用户标识/密码(例如,应用程序池回收),则可以强制用户重新登录(使用FormsAuthentication.SignOut后跟RedirectToLoginPage)。

+0

该机制仍然存在一个弱点:如果用户删除会话状态cookie,但不是身份验证cookie,会发生什么情况? – pyon 2011-05-19 13:39:18

+0

@Eduardo,不是真的,如果用户删除会话cookie,那么会话将过期,并且会触发条件是最后一个段落,即如果您没有找到用户ID /密码,则强制用户注销。您可以将这种检查按需(即访问数据库时)或基本页/ global.asax中进行检查。 – VinayC 2011-05-20 04:44:59