在搜索了很多后,我没有得到任何答案,最终不得不求助于你。下面我将详细解释我的问题。由于篇幅过长,请不要放弃阅读。我已用简单易懂的语言解释了我的问题。
我一直在开发一个asp.net mvc项目。 我正在使用标准的ASP.NET角色和成员资格。 一切正常工作,但记住我功能根本不起作用。 我列出了所有的工作细节。希望大家能够帮助我解决这个问题。
我只需要这个:
我需要用户登录Web应用程序。在登录时,他们可以选择记住我或不记住我。 如果用户登录并选择记住我,那么我希望浏览器能够记住他们很长一段时间,比如至少一年或者更长时间。就像www.dotnetspider.com、www.codeproject.com、www.daniweb.com和许多其他网站一样。 如果用户不选择记住我,则浏览器应该允许访问网站20-30分钟左右,之后他们的会话应该过期。当用户登录并关闭浏览器而没有注销时,他们的会话也应该过期。
注意:我已经成功地实现了上述功能,而没有使用标准的asp.net角色和成员资格,而是创建了自己的用户表来进行身份验证,将cookie和会话设置在我的其他项目中。但是对于这个项目,我们从一开始就使用了标准的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); }
现在的问题如下:
在上面的部分中,我已经说明了"I simply need this"。用户可以成功登录系统。他们的会话存在于web.config中指定的超时值所规定的时间内。我还提供了我的web.config示例。在我的示例中,如果我将超时设置为5分钟,则用户会话在5分钟后过期,这很好。但是,如果用户关闭浏览器并重新打开浏览器,则在“超时”未过期之前,用户仍然可以进入网站而无需登录。超时值的滑动过期也正常工作。现在,如果用户勾选了“记住我”,则用户会话仍然在5分钟后过期。这不是好的行为,对吧?我的意思是说,如果用户勾选了“记住我”,那么他应该被记住很长时间,直到他退出系统或用户手动从浏览器中删除所有cookie。如果用户没有勾选“记住我”,则他的会话应在web.config中指定的超时期限后过期,同时如果用户关闭浏览器,则会话也会过期。问题在于,如果用户关闭浏览器并重新打开它,则仍然可以进入网站而无需登录。我在互联网上搜索了很多关于这个主题的内容,但是没有找到解决方案。在Scott Gu先生关于完全相同主题的博客文章(http://weblogs.asp.net/scottgu/archive/2005/11/08/430011.aspx)中,用户在评论中抱怨了同样的问题,但是Scott先生并没有给出简单的解决方案。
我在以下地方阅读到了相关信息: http://weblogs.asp.net/scottgu/archive/2005/11/08/430011.aspx 链接
我猜这是很多用户都面临的问题,正如Scott Gu先生在博客文章中所提到的。
非常感谢您的帮助。 提前致谢。