2013-02-17 232 views
1

我無法在網上找到我在找什麼,所以任何幫助,將不勝感激。 我實現了一個自定義登錄形式,其中用戶輸入自己的電子郵件地址和密碼登錄,然後我用這些憑據查詢數據庫(密碼哈希和鹽漬),如果兩者都發現了,然後我的用戶名存儲在會話州。如果用戶關閉瀏覽器,那麼Session會丟失,因此他必須重新登錄。 我學會了如何使用cookie來實現「記住我」功能,但我不知道該如何將cookie存儲在自動登錄過程中並使其安全。 PS:我知道cookie是什麼以及它是如何工作的。我也知道,不建議將用戶憑據(電子郵件+密碼)存儲在cookie中。 我使用asp.net 4.0與C#使用Cookie在asp.net中自動登錄用戶(自定義登錄)

其實我正在尋找使用cookie自動登錄系統背後的邏輯。

謝謝!

回答

2

你應該只使用FormsAuthentication設置餅乾:

FormsAuthentication.SetAuthCookie(theUserID, true); 

然後拿回來:

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

如果你擔心安全,你只能使用安全cookie考慮(你只能夠讀取通過https該cookie) 。

有一個相關的帖子更多關於這方面的信息:Manual Access control in 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,即使這樣做也是非理性的。

在這種情況下,他們第一次點擊該頁面時,將顯示Username: Not logged in,然後它會以「CookieMan」的身份登錄。刷新頁面將顯示Username: CookieMan

+0

我使用**自定義登錄**表單,那麼爲什麼你建議我FormsAuthentication? – osmiumbin 2013-02-17 20:20:08

+0

...因爲它有效?這將設置一個cookie來保存當前登錄的用戶信息。嘗試一下。儘管我可能會存儲電子郵件而不是userId。我在自定義角色提供程序的自定義登錄中使用了它。 – MikeSmithDev 2013-02-17 20:22:17

+0

@osmiumbin增加了一個例子。希望你會玩這個,看看它是一個管理你的認證cookie的好方法。 – MikeSmithDev 2013-02-17 22:00:51

0

每當我這樣做,我只是組成一些隨機的「SessionId」GUID並使用該值。

如果你的代碼,你可以保持一個列表的sessionId /用戶ID對,並在必要時終止它們。

1