您应该只使用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,即使是像这样不合理的。
在这种情况下,当他们第一次点击页面时,它会显示Username: Not logged in
,然后它会将他们作为“CookieMan”登录。刷新页面将显示Username: CookieMan
。