3

次のコードがあります。

if (HttpContext.Current.Request.IsAuthenticated == false)
{
    // this isn't reached so i know user is Authenticated
    return;
}
FormsIdentity fIdentity = HttpContext.Current.User.Identity as FormsIdentity;
string[] delimitedUserData = fIdentity.Ticket.UserData.Split('|');
// but at this point delimitedUserData.Length is 0

UserData がなくなったにもかかわらず、認証チケットが有効になる原因についてのアイデアはありますか?

私のプログラムは通常問題なく動作し、すべての UserData に簡単にアクセスできます。しかし、時々、UserData が存在しないこの状態に陥ります。

4

4 に答える 4

0

私はまだasp.netにかなり慣れていないので、これが最善のアプローチであるかどうかはわかりませんが、ログイン時にこれを行う方法は、後のページでチェックできるセッション値を設定することです.値を取得できないため、ログイン ページに移動できません。

したがって、ログインの直後 (_LoggedIn イベント内) で、次のことを行います。

        // write ClientID to the session
        Session.Add("ClientID", lClientID);

次に、ログインの背後にある各ページの読み込み時に、次のことを行います。

if (User.Identity.IsAuthenticated == false || Convert.ToInt32(Session["ClientID"]) == 0)
    {
        Server.Transfer("Login.aspx");
    }

これまでのところ、私にとってはかなりうまくいっています。

于 2009-02-23T12:56:13.020 に答える
0

チケットは Cookie に保存されます。Cookie の有効期限が切れた直後にページにアクセスすると、コードはどうなるでしょうか?

また、デフォルトでUser.Identity.IsAuthenticatedtrue が返されるため、そのプロパティはおそらくテストするのに最適なものではないことに注意してください。

于 2009-02-22T18:06:45.433 に答える
0

FormsAuthentication 自体は、UserData に何も入れません。チケットの作成 (および UserData の作成) を処理する場所の近くにブレークポイントを配置し、それがたどるパスをトレースする価値があります。

バグは断続的であるため、強制的にトリガーするのはおそらく難しいでしょう。開始する場所は、Cookie の期限切れを処理する方法、または Cookie が無効になったときのトレースです。

Firefox を使用している場合は、「Add N Edit Cookies」プラグインを使用することをお勧めします: https://addons.mozilla.org/en-US/firefox/addon/573

于 2009-02-22T18:15:34.540 に答える
0

私は同じ問題を探していて、「FormsAuthentication.RedirectFromLoginPage」を使用してCookieを追加したという問題を見つけました。「response.cookies.add」に変更しました。そしてその働き。

于 2009-08-18T05:39:35.347 に答える