在搜索了很多之后,我没有得到任何答案,最后我不得不回复你。下面我详细解释我的问题。太长了,请不要放弃阅读。我已经用简单的语言解释了我的问题。
我一直在开发一个 asp.net mvc 项目。我正在使用标准的 ASP.NET 角色和成员资格。一切正常,但记住我的功能根本不起作用。我列出了所有工作细节。希望你们能帮我解决这个问题。
我只需要这个:
我需要用户登录到 Web 应用程序。在登录期间,他们可以使用记住我或不使用它登录。如果用户使用记住我登录,我希望浏览器记住他们很长时间,比如说至少一年或相当长的时间。他们在 www.dotnetspider.com、www.codeproject.com、www.daniweb.com 和许多其他网站上的做法。如果用户在不记得我的情况下登录,那么浏览器应该允许访问网站大约 20 -30 分钟,然后他们的会话应该过期。当用户登录并关闭浏览器而不注销时,他们的会话也应该过期。
注意:我通过为用户创建自己的 talbes 并针对我的数据库表进行身份验证,在我的其他项目中设置 cookie 和会话,成功地实现了上述功能,而无需使用标准的 asp.net 角色和成员资格。但是对于这个项目,我们从一开始就使用标准的 asp.net 角色和成员资格。我们认为它会起作用,并且在测试时构建了所有内容之后,它就不起作用了。现在我们不能用标准的 asp.net 角色和成员资格替换现有的功能,用我自己的自定义用户表和所有东西,你明白我在说什么。
要么是标准 asp.net 角色和成员资格功能存在某种错误,要么我对标准 asp.net 角色和成员资格的整个概念有错误。我已经在上面说明了我想要的。我认为这是非常简单和合理的。
我做了什么
- 使用用户名、密码和记住我字段的登录表单。
- 我在 web.config 中的设置:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880"/>
</authentication> 在我的控制器动作中,我有这个:
FormsAuth.SignIn(userName, rememberMe);
public void SignIn(string userName, bool createPersistentCookie) { FormsAuthentication.SetAuthCookie(userName, createPersistentCookie); }
现在问题如下:
我已经在上面的部分“我只需要这个”中说过。用户可以成功登录系统。他们的会话存在的时间与 web.config 中超时值中指定的时间一样多。我还提供了我的 web.config 示例。在我的示例中,如果我将超时设置为 5 分钟,那么用户会话将在 5 分钟后过期,没关系。但如果用户关闭浏览器并重新打开浏览器,用户仍然可以在没有登录的情况下进入网站,直到“超时”中指定的时间没有过去。超时值的滑动到期也可以正常工作。现在,如果用户在选中记住我的情况下登录系统,用户会话在 5 分钟后仍会过期。这不是好的行为,是吗?我的意思是说,如果用户登录系统时勾选了记住我,他应该被记住很长时间,直到他没有 t 退出系统或用户未手动从浏览器中删除所有 cookie。如果用户在不记得我的情况下登录系统,他的会话应该在 web.config 中指定的超时期限值之后过期,并且如果用户关闭浏览器。问题是,如果用户关闭浏览器并重新打开它,他仍然可以在不登录的情况下进入网站。
我在网上搜索了很多关于这个主题的内容,但我找不到解决方案。在Scott Gu 发表的关于完全相同主题的博文 ( http://weblogs.asp.net/scottgu/archive/2005/11/08/430011.aspx ) 中。用户在他们的评论中抱怨同样的事情,但斯科特先生没有给出简单的解决方案。
我在以下地方阅读它: http ://weblogs.asp.net/scottgu/archive/2005/11/08/430011.aspx http://geekswithblogs.net/vivek/archive/2006/09/14/91191。 aspx
我想这是很多用户的问题。从 Scott Gu 先生的博客文章中可以看出。
您的帮助将不胜感激。提前致谢。