2013-02-17 229 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