AspNet Web アプリでカスタム認証 Cookie を扱っています。
コンポーネントを使用してasp:Login
、ユーザーが認証される方法は次のとおりです。
void L_Authenticate(object sender, AuthenticateEventArgs e)
{
if (L.UserName == "john" && L.Password == "cookie")
{
FormsAuthenticationTicket ticket =
new FormsAuthenticationTicket(1, "john",
DateTime.Now,
DateTime.Now.AddSeconds(30),
false, "");
var cookieConnexion = new HttpCookie("myCookie");
cookieConnexion.Value = FormsAuthentication.Encrypt(ticket);
cookieConnexion.Expires = ticket.Expiration;
this.Response.Cookies.Set(cookieConnexion);
Z.Text = "<a href='/Prive/Home.aspx'>next</a>";
}
}
まず、設定しないe.Authenticated = true
と.ASPXAUTH
Cookieが作成されます。私はそれをしたくありません。第二に、私はしませんResponse.Redirect
。
現在、Global.asax では、User が current に設定されていますHttpContext
。
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
if (Request.IsAuthenticated)
{
}
else
{
var cookie = this.Request.Cookies["myCookie"];
if (cookie != null)
{
var ticket = FormsAuthentication.Decrypt(cookie.Value);
if (ticket != null)
{
HttpContext.Current.User =
new ClientRolePrincipal(new GenericIdentity(ticket.Name));
ticket = new FormsAuthenticationTicket(1, ticket.Name,
DateTime.Now,
DateTime.Now.AddSeconds(30),
false, ticket.UserData);
cookie.Value = FormsAuthentication.Encrypt(ticket);
cookie.Expires = ticket.Expiration;
this.Response.Cookies.Set(cookie);
}
}
}
}
アプリへの最初のリクエスト (Chrome 開発ツールを使用して、リクエスト/レスポンス ヘッダーで Cookie を追跡します):
- 0 個の Cookie がリクエストされています
- 応答の 0 Cookie: ASP.NET_SessionId
ユーザーのログイン:
- リクエスト内の 1 つの Cookie: ASP.NET_SessionId
- 応答の 1 つの Cookie: myCookie
ユーザーが Home.aspx を参照します。
- リクエスト内の 2 つの Cookie: ASP.NET_SessionId、myCookie
- 応答の 1 つの Cookie: myCookie (更新済み)
わかった。
ここで、PreRender
this.Request.Cookies に含まれる要素を表示すると、 が 2 回表示されますmyCookie
。なんで?
- ASP.NET_SessionId、ドメイン「」、パス「/」、値 = nk1cy255quh32o45hxtg4x55
- myCookie、ドメイン「」、パス「/」、値 = BF6246B7E5A5100AA59A7B7237B446...
- myCookie、ドメイン「」、パス「/」、値 = BF6246B7E5A5100AA59A7B7237B446...