繁体   English   中英

使用cookie在asp.net中自动登录用户(自定义登录)

[英]Using cookies to auto-login a user in asp.net (custom login)

我无法在网上找到我正在寻找的东西,所以任何帮助将不胜感激。 我已经实现了一个自定义登录表单,用户输入他的电子邮件和密码进行登录。然后我使用这些凭据查询数据库(密码是哈希和盐渍的),如果两者都找到,那么我将UserID存储在会话状态。 如果用户关闭浏览器,则会话丢失,因此他必须再次登录。 我学会了使用cookie来实现“记住我”功能,但我不知道我应该在cookie中存储什么以进行自动登录过程并使其安全。

PS:我知道cookie是什么以及它是如何工作的。 我也知道不建议将用户凭据(电子邮件+密码)存储在cookie中。 我正在使用带有C#的asp.net 4.0

其实我正在寻找使用cookie的自动登录系统背后的逻辑。

谢谢!

您应该只使用FormsAuthentication来设置cookie:

FormsAuthentication.SetAuthCookie(theUserID, true); 

然后把它拿回来:

string userId = HttpContext.Current.User.Identity.Name;

如果您担心安全性,可以考虑仅使用安全cookie(您只能通过https读取该cookie)。

在相关文章中有更多相关信息: ASP .Net中的手动访问控制

更新:根据您的评论,您认为您不能在自定义登录表单中设置表单身份验证cookie。 所以我创建了一个空白的ASP.NET 4项目,在那里我创建了一个自定义登录 - 它将登录任何未经身份验证的用户。 以下是三件:

web.config (你的项目应该有类似的东西,因为你的网站上有一个人们登录的表单):

<authentication mode="Forms"></authentication>

代码前端:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="emptyWebApp._default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Example</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
     Username: <asp:Label ID="_username" runat="server"></asp:Label>
    </div>
    </form>
</body>
</html>

背后的代码:

using System;
using System.Web;
using System.Web.Security;

namespace emptyWebApp
{
    public partial class _default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (HttpContext.Current.User.Identity.IsAuthenticated)
            {
                _username.Text = HttpContext.Current.User.Identity.Name;
            }
            else
            {
                _username.Text = "Not logged in";
                FormsAuthentication.SetAuthCookie("CookieMan", true);
            }
        }
    }
}

如您所见,您可以在自己的自定义身份验证功能中使用FormsAuthentication.SetAuthCookie设置身份验证Cookie,即使是一个非理性的身份验证Cookie。

在这种情况下,当他们第一次点击页面时,它将显示Username: Not logged in ,然后它将以“CookieMan”身份登录。 刷新页面将显示Username: CookieMan

每当我这样做,我只需要编写一些随机的“SessionId”guid并使用该值。

如果您的代码可以保留列表sessionId / UserId对并在必要时使它们到期。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM