簡體   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