[英]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.