0

負荷分散アプリケーションがあり、ユーザーがログインしようとすると、他の人の名前が表示されるという問題があります。

ログアウト プロセス中は、「Session.Abandon();」のみを呼び出します。http://support.microsoft.com/kb/899918の記事には、次のように記載されています。

セッションを放棄しても、セッション ID Cookie はユーザーのブラウザから削除されません。したがって、セッションが放棄されるとすぐに、同じアプリケーションへの新しいリクエストは同じセッション ID を使用しますが、新しいセッション状態インスタンスを持ちます。同時に、ユーザーが同じ DNS ドメイン内で別のアプリケーションを開いた場合、Abandon メソッドが 1 つのアプリケーションから呼び出された後、ユーザーはセッション状態を失うことはありません。

ログイン中にユーザーが他の人の名前を表示する理由を誰かが知っていますか?

編集済み - コード:

public class CacheManager
{
public Contact.Contact User
{
    get { return HttpContext.Current.Session["Contact"] as Contact.Contact; }
    set { HttpContext.Current.Session["Contact"] = value; }
}
}

header.ascx.cs

/// <summary>
/// This is the session manager
/// </summary>
public readonly CacheManager Localcache = new CacheManager();


public Login()
{
     var contact = BAL.Contact.Get(this.UserName, this.Password);
     Localcache.User = contact;
     Response.Redirect(Request.Url.AbsoluteUri);
}

protected void Logout_Click(object sender, ImageClickEventArgs e)
{
        Session.Abandon();
        Response.Redirect(Constants.HomePage);
}


header.ascx:

You are logged in as
<br />
<span class="user_desc">
<%= string.Format("{0} {1}",LocalCache.User.FirstName ,LocalCache.User.LastName)%></span>
4

1 に答える 1

1

ユーザーが明示的にログアウトし、新しいユーザーがページにアクセスすると (ブラウザーが閉じられていないと仮定して)、ブラウザーは引き続き sessionId を保持します ( と があってもSession.Clear()) Session.Abandon()

これらのコード行を追加してみてください

Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

チェックするリンク

于 2013-07-08T07:17:44.890 に答える