2012-04-09 9 views
2

In meiner Anwendung, wenn zwei oder mehr Benutzer angemeldet sind und wenn sie gleichzeitig auf dieselbe Seite klicken (zur exakten Zeit), dann ist der Login geändert von anderen Login. Der Code auf meiner Seite laden Ereignis ist wie folgt.Login wird von anderen Benutzern geändert, wenn 2 oder mehr Benutzer gleichzeitig auf dieselbe Seite klicken

MembershipUser mUser = Membership.GetUser(); 

if (mUser != null) 
{ 
    aspUserId.Value = mUser.ProviderUserKey.ToString(); 
    DBHandler dbHandler = new DBHandler(); 
    SqlCommand cmd = new SqlCommand(); 
    cmd.Parameters.AddWithValue("@AspNetUserID", mUser.ProviderUserKey); 
    string sPMSUserId = dbHandler.GetSingleValue(cmd, "get_PMSUserId"); 
    hdnUserID.Value = sPMSUserId; 


} 
else 
{ 
    Response.Redirect("~/index.aspx"); 
} 

hdnUserID wird verwendet Wert zu übergeben select-Anweisung Parameter SQLDataSource. aspUserId wird auch verwendet, um aspnet_UserID des Benutzers zu testen. Ich teste es mit inspect-Element . Ich fand, dass es Wert von anderen Benutzer aspnet_UserID geändert wird.

in DBHandler verwendet i-Verbindungszeichenfolge als wie

string strconn = ConfigurationManager.ConnectionStrings["strconn"].ConnectionString; 

mit Code wie die

public string GetSingleValue(SqlCommand sqlcmdWithParameters, string CommandText) 
{ 
    string sReturn = ""; 
    SqlConnection sqlcon = new SqlConnection(strconn); 
    sqlcmdWithParameters.Connection = sqlcon; 
    sqlcmdWithParameters.CommandType = CommandType.StoredProcedure; 
    sqlcmdWithParameters.CommandText = CommandText; 
    try 
    { 
     sqlcon.Open(); 
     sReturn = Convert.ToString(sqlcmdWithParameters.ExecuteScalar()); 
    } 
    catch (Exception ex) 
    { 
     sReturn = "-1"; 
    } 
    finally 
    { 
     sqlcon.Close(); 
    } 
    return sReturn; 
} 

Endlich habe ich Ursache des Problems. Ja, es ist aufgrund von Cache-

auf ASPX-Seite i nehmen Richtlinie von Output als

 <%@ OutputCache Duration ="1" NoStore ="true" VaryByParam ="*" %> 

dies meine Seite hält für 1 Sekunde zwischenzuspeichern. Wenn eine andere Seite innerhalb von 1 Sekunden eine Anforderung stellt, wird die Seite im Cache zurückgegeben, obwohl sie von einem anderen Benutzer stammt.

+0

Was ist Ihre Frage? –

+0

Wie genau ist "genaue Zeit" trotzdem? Es muss schwierig sein, zwei Computer dazu zu bringen, sich zur gleichen Zeit * anzumelden. – Patrick

Antwort

1

Wie sieht Ihre DBHandler aus? Teilen Sie sich irgendwie eine Verbindung für alle Datenbankarbeiten (z. B. die Verbindung ist ein statisches Mitglied von DBHandler)?

Der Code, den Sie hier gepostet haben, ist wahrscheinlich nicht das Problem. Es ist wahrscheinlicher, dass Sie irgendwo versehentlich eine Ressource zwischen Anfragen ohne ordnungsgemäße Sperrung teilen.

+1

@Sachin: Sie sollten nicht versuchen, Anders antworten, aktualisieren Sie stattdessen Ihre eigene Frage – Patrick

Verwandte Themen