2013-07-08 220 views
0

我有一个负载平衡应用程序,我们遇到了用户尝试登录的问题,他/她会看到其他人的姓名。ASP.NET会话状态问题

在注销过程中,我们只调用“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> 
+0

你使用的是InProc会话状态模式下,这些线路?我认为InProc在webfarm /网络负载平衡方面效果不佳。检查这个问题http://stackoverflow.com/questions/7084729/load-balancing-in-asp-net-what-i-should-consider-while-development –

+0

进程内会话状态 – user384080

回答

1

当用户明确注销和新的用户访问的页面(假设浏览器是不是封闭的),浏览器仍然保持SessionID的(即使Session.Clear()Session.Abandon() )。

尝试添加的代码

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

Link to check

+0

如果它维护记录后的sessionID那么在同一浏览器上的下一次登录将始终返回相同的用户,我是否正确? – user384080

+0

是的,如果维持'sessionId',那么在同一个浏览器上的下一次登录将返回相同的用户。 – Rahul

+0

但问题是用户看到别人的名字,这意味着他用他的帐户登录,但另一个帐户正在由应用程序返回..我真的不明白这是怎么发生的!? – user384080