0

わかりました、ログイン ページで使用される認証を割り当てられました。私はかなり長い間これに取り組んできましたが、それをクリーンアップすることにしました。私が直面した問題は、例外がスローされず、エラーが生成されず、すべて問題ないように見えるが、関数を使用しようとすると、望ましくない結果が返されるという問題の 1 つです。

私が使用したコードは、このページのコードと非常によく似ています。

http://msdn.microsoft.com/en-us/library/system.web.security.formsauthenticationticket.aspx

プロジェクトでデモのコードを使用しました。

  FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
    username,
    DateTime.Now,
    DateTime.Now.AddMinutes(30),
    isPersistent,
    userData,
    FormsAuthentication.FormsCookiePath);

  // Encrypt the ticket.
  string encTicket = FormsAuthentication.Encrypt(ticket);

  HttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket)

  // Create the cookie.
  Response.Cookies.Add(myCookie);

したがって、ログインすると、すべてが機能し、以下のコードは true と評価されます。

ただし、いずれかのバージョンを使用して myCookie にサブキーを含めたい場合:

  myCookie.Values.Add("userName", "patrick"); //version 1
  myCookie.Values["userName"] = "patrick";  //version 2

次に、Cookie コレクションに追加します。

  Response.Cookies.Add(myCookie);

ログイン後にページを更新します。

  //This always set to false even after successful log on
  HttpContext.Current.User.Identity.IsAuthenticated;

理由がわからない!

暗号化値を httpcookie にすぐに追加する必要がない何かをしたかったのです。

 //IsAuthenticated doesn't work = false
 HttpCookie cookie = new HttpCookie(FormsAuthentication.FormCookieName);
 cookie.Values.Add("encryptTicket", encTicket);

サブキーの追加がまったく機能しないのは奇妙です。そして、チケットを機能させるために、チケットを暗号化する必要があります。つまり、 IsAuthenticated は、ログインして認証されているかどうかにかかわらず、常に false です。これで何が起こっているのか説明できる人はいますか?私は実用的な解決策を持っていますが、どんな洞察も役に立ちます。

4

1 に答える 1

0

わかりました、私はこれを理解したと思います。これは、フォーム認証用に web.config がどのように設定されたかが原因です。フォームタグを使用します。

FormsAuthenticationTicketは特定の情報についてそのタグを調べます。そのタグから Cookie を作成しないと、認証されません。これも UseCookies の Cookie レス モードにデフォルト設定されました。

とにかく、それから Cookie を作成した後、認証され、新しいセッションが作成されます。その後、必要な追加の Cookie を提供し、必要に応じて Web サイトでそれらを使用できるようにします。しかし、その AuthCookie (私の場合は .ASPXAUTH) が有効である限り、私の認証セッションも有効です。

実際、Cookie とチケットの有効期限を MinValue に設定して、ブラウザを閉じたときに Cookie セッションを終了させようとしたところ、どちらも認証できませんでした。Cookie よりも先にチケットが期限切れにならないように、実際の Cookie よりもチケットを長持ちさせる必要がありました。

チケット情報は実際には Cookie を作成するために使用される構成であり、Cookie の作成後は、ブラウザーが Cookie の使用方法を定義します。

于 2013-06-12T05:41:49.450 に答える