gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 记住我

转载 作者:行者123 更新时间:2023-12-03 22:58:47 24 4
gpt4 key购买 nike

在搜索了很多之后,我没有得到任何答案,最后我不得不回复你。下面我详细解释我的问题。太长了,请不要放弃阅读。我已经用简单的语言解释了我的问题。

我一直在开发一个asp.net mvc 项目。
我正在使用标准的 ASP.NET 角色和成员资格。
一切正常,但记住我的功能根本不起作用。
我列出了工作的所有细节。希望大家能帮我解决这个问题。

我只需要这个:

我需要用户登录到 Web 应用程序。在登录期间,他们可以使用记住我或不使用记住我登录。
如果用户使用记住我登录,我希望浏览器记住他们很长时间,比如说至少一年或相当长的时间。他们在 www.dotnetspider.com、www.codeproject.com、www.daniweb.com 和许多其他网站上这样做的方式。
如果用户在没有记住我的情况下登录,那么浏览器应该允许访问网站大约 20 -30 分钟,之后他们的 session 应该过期。当用户登录并关闭浏览器而不注销时,他们的 session 也应该过期。

注意:通过为用户创建我自己的 talbes 并针对我的数据库表进行身份验证,在我的其他项目中设置 cookie 和 session ,我成功地实现了上述功能,而无需使用标准的 asp.net 角色和成员资格。但是对于这个项目,我们从一开始就使用标准的 asp.net 角色和成员资格。我们认为它会起作用,但在测试时构建了所有内容之后,它就不起作用了。现在我们不能用标准的 asp.net 角色和成员身份替换现有的功能,我自己的自定义用户表和所有东西,你明白我在说什么。

要么标准asp.net角色和成员资格功能存在某种错误,要么我对标准asp.net角色和成员资格的整个概念错误。我已经在上面说明了我想要的东西。我认为这是非常简单和合理的。

我做了什么

  • 使用用户名、密码和记住我字段的登录表单。
  • 我在 web.config 中的设置:
    <身份验证模式="表单">

  • 在我的 Controller 操作中,我有这个:

    FormsAuth.SignIn(userName, rememberMe);

    public void SignIn(string userName, bool createPersistentCookie)
    {
    FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
    }

  • 现在问题如下:

    我已经在上一节中说明了“我只需要这个”。
    用户可以成功登录系统。他们的 session 存在的时间与 web.config 中超时值中指定的一样多。我还提供了我的 web.config 示例。在我的示例中,如果我将超时设置为 5 分钟,那么用户 session 会在 5 分钟后过期,那没关系。但是,如果用户关闭浏览器并重新打开浏览器,用户仍然可以在未登录的情况下进入网站,直到“超时”中指定的时间没有过去。超时值的滑动到期也工作正常。现在,如果用户在选中记住我的情况下登录系统,用户 session 仍会在 5 分钟后过期。这不是好行为,是吗?我的意思是说,如果用户在选中记住我的情况下登录系统,他应该被记住很长时间,直到他没有退出系统或用户没有从浏览器中手动删除所有 cookie。如果用户在没有记住我的情况下登录系统检查他的 session 应该在 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 先生的博客文章中可以看出。

    您的帮助将不胜感激。
    提前致谢。

    最佳答案

    您想要做的是在RememberMe 选项被选中时有一个不同的超时,而不是在它未被选中时。不幸的是,SetAuthCookie 方法不允许您手动设置到期时间,因此您必须自己进行设置。

    那么问题来了,怎么做呢?

    ASP.NET MVC 使用 System.Web.Security 的 FormsAuthentication 类来做到这一点,因为如果您还想支持配置设置和无 cookie 浏览和 SSL,这并非易事,但我认为如果您只是这样做:

    int timeout = rememberMe ? 525600 : 30; // Timeout in minutes, 525600 = 365 days.
    var ticket = new FormsAuthenticationTicket(userName, rememberMe, timeout);
    string encrypted = FormsAuthentication.Encrypt(ticket);
    var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted);
    cookie.Expires = System.DateTime.Now.AddMinutes(timeout);// Not my line
    cookie.HttpOnly = true; // cookie not available in javascript.
    Response.Cookies.Add(cookie);

    ...您将获得所需内容的基本版本。

    注意:我没有测试这段代码。

    关于asp.net-mvc - ASP.NET MVC 记住我,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2452656/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com