2010-01-01 36 views
0

作为一个用户,当我看到一个“记住我”复选框时,我希望它记住我 - 不仅仅是当我关闭浏览器时,而且当我一周后回到网站时。ASP.NET MVC中Forever Timeout的缺陷?

所以在我的ASP.NET MVC应用程序,我正在考虑以下的web.config值:

<authentication mode="Forms"> 
    <forms defaultUrl="/" loginUrl="/account/login" name=".ASPXAUTH" timeout="50000000" /> 
</authentication> 

我打算也有userIsOnlineTimeWindow =“20”仍然有关于谁在线上体面的统计数据。我还计划设置一个machineKey,以便在IIS回收时不会启动用户。

有关此设置的想法?我最担心的是它会占用资源 - 但它会在无状态的MVC应用程序中吗?是不是真的与sessionState超时变量相关,而不是认证超时?并且sessionState在MVC中不再相关?我看到了相互矛盾的信息,并试图找到它的底部。

另外,如果我采取这种方法,我认为这也应该照顾用户填写表单很长时间才提交,他们失去了他们的工作。我已经看到过与此相关的帖子,但我试图同时解决两个问题(在查看页面时保持活力,如果我说“记住我”,还可以保持活跃状态​​)

我看到的一个问题是,如果用户没有说“记住我”,它仍然会记住他们,直到他们关闭浏览器(对我而言,这符合用户的期望)。另一个问题是我可能需要按照http://scottonwriting.net/sowblog/posts/11167.aspx对IsApproved和IsLockedOut执行额外的检查。

思考?特别是对系统资源的问题,谢谢。

回答

0

FormsAuthentication被存储在客户端浏览器的cookie并不会自己使用的任何资源。该timeou t设置不会改变服务器内存中保存的内容或与常规会话存储有关的任何内容。

如果您完全依赖从FormsAuthentication(HttpContext.User)获得的用户ID /名称,那么是的,管理用户帐户可能会有问题,例如您指出。每次请求查找实际当前用户数据一次是一个好习惯。

+0

当你说实际的当前用户数据,你的意思是与GetUser?这从成员资格数据库获取它,而HttpContext.User包括cookie和会话信息,是否正确? – Vince 2010-01-04 14:09:17

+0

是的,从你发布的链接看来,Membership.GetUser()就是我的意思。 – rmac 2010-01-04 16:48:12