Zdravim, uz dlhsie pouzivam SimpleSqlMembershipProvider od Altairis a teraz som narazil na jeden problem. Potrebujem zabezpecit aby sa mi nemohol prihlasit ten sami uzivatel dva krat. Puzivam na to hodnotu Loged v profile uzivatela. Urobil som to jednoducho tak ze som v code pri logine pridal kod:
protected void LoginMain_LoggingIn(object sender, LoginCancelEventArgs e)
{
String sUser;
MembershipUser user;
ProfileCommon profil;
if (!HttpContext.Current.User.Identity.IsAuthenticated)
{
Login lg = (System.Web.UI.WebControls.Login)LoginArea.FindControl("LoginMain");
TextBox tb = (TextBox)lg.FindControl("UserName");
sUser = tb.Text;
user = Membership.GetUser(sUser);
profil = Profile.GetProfile(sUser);
if (profil.Loged == 1)
{
string failtext = "Duplicitné prihlásenie toho istého užívateľa nieje možné !!!";
ClientScript.RegisterStartupScript(this.GetType(), "Popup", "ShowPopup('" + failtext + "');", true);
lg.FailureText = failtext ;
e.Cancel = true;
}
else
{
profil.Loged = 1;
profil.Session = Session.SessionID.ToString();
profil.Save();
}
}
}
a zas pri odhlaseni
protected void HeadLoginStatus_LoggingOut(object sender, LoginCancelEventArgs e)
{
Profile.Loged = 0;
Profile.Session = null;
Profile.Save();
}
Funguje to ale problem mam ked uzvatel zrusi okno prehliadaca bez predchadzajuceho odhlasenia alebo vyprsania sedenia nastavené v
<membership defaultProvider="MyMembershipProvider" userIsOnlineTimeWindow="20" >
Skusal som do global.asax pridat
protected void Session_End(Object sender, EventArgs e)
{
Profile.LogedIn = 0;
Profile.Session = null;
Profile.Save();
}
Ale to nema zmysel, spusti sa až po 20 min. a profil uz neexistuje dojde k chybe. Chcem to riesit cez session ale nerozumiem ako to presne funguje a uz vobec netusim ako to to mam nakodovat aby to fungovalo s altaris SimpleSqlMembershipProvider. Viete poradit ?
|