FormsAuthentication.SetAuthCookie 方法 (String, Boolean)

创建身份验证Cookie
FormsAuthentication.SetAuthCookie 方法 (String, Boolean)?

为提供的用户名创建一个身份验证票证,并将其添加到响应的 Cookie 集合或 URL。

命名空间:System.Web.Security
程序集:System.Web(在 system.web.dll 中)

语法
Visual Basic(声明)
Public Shared Sub SetAuthCookie ( _
    userName As String, _
    createPersistentCookie As Boolean _
)
Visual Basic(用法)
Dim userName As String
Dim createPersistentCookie As Boolean

FormsAuthentication.SetAuthCookie(userName, createPersistentCookie)
C#
public static void SetAuthCookie (
    string userName,
    bool createPersistentCookie
)
C++
public:
static void SetAuthCookie (
    String^ userName, 
    bool createPersistentCookie
)
J#
public static void SetAuthCookie (
    String userName, 
    boolean createPersistentCookie
)
JScript
public static function SetAuthCookie (
    userName : String, 
    createPersistentCookie : boolean
)

 

 

参数
userName

已验证的用户的名称。这不必映射到 Windows 帐户。

createPersistentCookie

若要创建持久 Cookie(跨浏览器会话保存的 Cookie),则为 true;否则为 false

 
当 `HttpCookie ticketCookie = Request.Cookies[FormsAuthentication.FormsCookieName];` 中的 `ticketCookie` 偶尔为空值时,可能由多种原因导致,以下是一些可能的解决方案: ### 1. 检查 Cookie 是否过期 Cookie 有过期时间,如果过期,客户端将不再发送该 Cookie 到服务器。可以在设置 Cookie 时,确保设置合适的过期时间。参考引用中关于设置过期时间的示例如下: ```csharp HttpCookie newcookie = new HttpCookie("username"); newcookie.Value = "oys"; newcookie.Expires = DateTime.Now.AddDays(1); // 设置 Cookie 一天后过期 Response.AppendCookie(newcookie); ``` 在代码中可以这样设置 FormsAuthentication 的 Cookie 过期时间: ```csharp FormsAuthenticationTicket ticket = new FormsAuthenticationTicket( 1, // 版本号 "username", // 用户名称 DateTime.Now, // 创建时间 DateTime.Now.AddDays(1), // 过期时间 true, // 是否持久化 "userData" // 用户数据 ); string encryptedTicket = FormsAuthentication.Encrypt(ticket); HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); authCookie.Expires = ticket.Expiration; Response.Cookies.Add(authCookie); ``` ### 2. 检查 Cookie 路径和域 Cookie 有路径和域的限制,如果路径或域不匹配,客户端不会发送该 Cookie。确保设置 Cookie 时路径和域正确。例如: ```csharp HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); authCookie.Path = FormsAuthentication.FormsCookiePath; authCookie.Domain = FormsAuthentication.CookieDomain; authCookie.Expires = ticket.Expiration; Response.Cookies.Add(authCookie); ``` ### 3. 检查浏览器设置 某些浏览器设置可能会阻止 Cookie 的使用。可以提示用户检查浏览器的 Cookie 设置,确保允许接受 Cookie。 ### 4. 检查是否被删除 在代码中可能存在删除 Cookie 的操作,导致 Cookie 丢失。参考引用中关于删除 Cookie 的示例如下: ```csharp // 删除整个 cookie,设置 cookie 日期过期 HttpCookie cookie = Request.Cookies.Get(FormsAuthentication.FormsCookieName); if (cookie != null) { cookie.Expires = DateTime.Now.Add(new TimeSpan(0, -3, 0, 0)); Response.Cookies.Add(cookie); } ``` 确保代码中没有意外删除该 Cookie 的操作。 ### 5. 检查请求是否跨域 如果请求是跨域的,浏览器可能会阻止发送 Cookie。可以考虑使用 CORS(跨域资源共享)来解决跨域问题。 ### 6. 检查是否重定向丢失 Cookie 在重定向过程中,可能会丢失 Cookie。可以确保在重定向时正确处理 Cookie。例如: ```csharp Response.Redirect("newPage.aspx", false); HttpContext.Current.ApplicationInstance.CompleteRequest(); ``` ### 示例代码 ```csharp // 设置 Cookie FormsAuthenticationTicket ticket = new FormsAuthenticationTicket( 1, "username", DateTime.Now, DateTime.Now.AddDays(1), true, "userData" ); string encryptedTicket = FormsAuthentication.Encrypt(ticket); HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); authCookie.Path = FormsAuthentication.FormsCookiePath; authCookie.Domain = FormsAuthentication.CookieDomain; authCookie.Expires = ticket.Expiration; Response.Cookies.Add(authCookie); // 获取 Cookie HttpCookie ticketCookie = Request.Cookies[FormsAuthentication.FormsCookieName]; if (ticketCookie == null) { // 处理 Cookie 为空的情况 // 例如重新登录 FormsAuthentication.RedirectToLoginPage(); } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值