2012-04-09 1 views
2

내 응용 프로그램에 두 명 이상의 사용자가 로그인하여 동시에 (정확한 시간에) 같은 페이지를 클릭하면 로그인됩니다 다른 사람이 로그인하여 변경되었습니다. 내 페이지로드 이벤트의 코드는 다음과 같습니다.두 명 이상의 사용자가 동시에 같은 페이지를 클릭하면 다른 사용자가 로그인을 변경합니다.

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는 sqlDatasource select 문 매개 변수에 값을 전달하는 데 사용됩니다. aspUserId는 사용자의 aspnet_UserID를 테스트하는데도 사용됩니다. 검사 요소 을 사용하여 테스트합니다.이 값은 다른 사용자의 aspnet_UserID에 의해 변경되었습니다.

는 DBHandler에 내가 마지막으로 내가 문제의 원인을 가지고 그

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; 
} 

과 같은 코드로

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

로 연결 문자열을 사용했다. 그래, 내가이 1 초 동안 캐시 내 페이지를 유지

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

으로 OutputCache를의 지침을에서 .aspx 페이지에서

를 캐시 때문이다. 다른 사용자가 1 초 이내에 다른 페이지를 요청하면 캐시의 해당 페이지가 반환됩니다.

+0

무엇이 당신의 질문입니까? –

+0

어쨌든 "정확한 시간"은 정확히 얼마입니까? 정확히 두 대의 컴퓨터가 동시에 로그인을 서버에 올리는 것은 어려워야합니다 *? – Patrick

답변

1

DBHandler은 어떤 모습입니까? 어떻게 든 모든 데이터베이스 작업에 대해 하나의 연결을 공유하고 있습니까 (예 : 연결은 정적 구성원 DBHandler입니다)?

여기에 게시 한 코드는 문제가되지 않습니다. 적절한 잠금을 사용하지 않고 요청간에 실수로 리소스를 공유하는 경우가 있습니다.

+1

@Sachin : 앤더스 편집을 시도하면 안됩니다. 대신 자신의 질문을 업데이트하십시오. – Patrick

관련 문제