내 응용 프로그램에 두 명 이상의 사용자가 로그인하여 동시에 (정확한 시간에) 같은 페이지를 클릭하면 로그인됩니다 다른 사람이 로그인하여 변경되었습니다. 내 페이지로드 이벤트의 코드는 다음과 같습니다.두 명 이상의 사용자가 동시에 같은 페이지를 클릭하면 다른 사용자가 로그인을 변경합니다.
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 초 이내에 다른 페이지를 요청하면 캐시의 해당 페이지가 반환됩니다.
무엇이 당신의 질문입니까? –
어쨌든 "정확한 시간"은 정확히 얼마입니까? 정확히 두 대의 컴퓨터가 동시에 로그인을 서버에 올리는 것은 어려워야합니다 *? – Patrick