【问题标题】:ASP.NET session stateid issueASP.NET 会话 stateid 问题
【发布时间】:2013-07-08 07:12:50
【问题描述】:

我有一个负载平衡应用程序,我们遇到了一个问题,即用户尝试登录时,他/她会看到其他人的名字。

在注销过程中,我们只调用“Session.Abandon();”。 http://support.microsoft.com/kb/899918 中的文章声明如下:

当您放弃会话时,会话 ID cookie 不会从 用户的浏览器。因此,会议一结束 放弃,对同一应用程序的任何新请求都将使用相同的 会话 ID,但会有一个新的会话状态实例。同时 时间,如果用户在同一个 DNS 中打开另一个应用程序 域,用户在 Abandon 后不会丢失会话状态 方法是从一个应用程序调用的。

有没有人知道为什么用户在登录时看到其他人的名字?

已编辑 - 代码:

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>

【问题讨论】:

标签: asp.net


【解决方案1】:

当用户明确退出并且新用户访问该页面(假设浏览器未关闭)时,浏览器仍会维护 sessionId(即使使用 Session.Clear()Session.Abandon())。

尝试添加这几行代码

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

Link to check

【讨论】:

  • 如果退出后保持sessionID,那么下次登录同一个浏览器总是返回同一个用户,对吗?
  • 是的,如果维护sessionId,那么下次在同一浏览器上登录将返回同一用户。
  • 但问题是用户看到了其他人的名字,这意味着他使用自己的帐户登录,但应用程序正在返回另一个帐户。我真的不明白这怎么会发生!?
  • 告诉我你的代码,你在哪里为会话赋值,如果你在使用前分配它,那么它会正常工作,告诉我你的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
  • 1970-01-01
相关资源
最近更新 更多