Jag ska bygga en inloggning där man har tre försök på sej att logga in sen ska ip-adressen spärras. Jag har denna kod, den fungerar som den ska förutom att det blir nåt fel vid räkningen. Jag har satt Session["logInFail"] = 3 i global.asax. Har du satt breakpoints i både Login_Error och Page_Load för att se så variabeln verkligen räknas ner?Räknfel
Det som blir fel är när man slår in fel uppgifter första gången så räknar den inte ner utan står kvar på tre, när jag sen andra gången slår fel går den ner till 2 och när jag slår fel en tredje gång går den ner till ett och disablar formuläret. Gör jag ett fel och lämnar sidan och sen går jag tillbaka så står det att jag har två försök kvar och rätt bild visas, så det fungerar ju.
<code>
protected void Page_Load(object sender, EventArgs e)
{
int myReturn = IpAccess.CheckIp(Request.UserHostAddress);
if (myReturn >= 1)
{
Login1.Enabled = false;
lblRejected.Visible = true;
lblLogInCheck.Visible = false;
imgLogIn.Visible = false;
Session["logInFail"] = 0;
imgLogIn.ImageUrl = "~/Graphic/trafficlight_red.png";
}
else
lblRejected.Visible = false;
if (!IsPostBack)
{
lblLogInCheck.Text = "Du har nu " + Session["logInFail"].ToString() + " försök att logga in innan din dator spärras.";
if((int)Session["logInFail"] == 3)
imgLogIn.ImageUrl = "~/Graphic/trafficlight_green.png";
else if ((int)Session["logInFail"] >= 1)
imgLogIn.ImageUrl = "~/Graphic/trafficlight_yellow.png";
else
{
imgLogIn.ImageUrl = "~/Graphic/trafficlight_red.png";
Login1.Enabled = false;
}
}
else
{
lblLogInCheck.Visible = true;
if ((int)Session["logInFail"] == 3)
{
lblLogInCheck.Text = "Du har nu " + Session["logInFail"].ToString() + " försök att logga in innan din dator spärras";
imgLogIn.ImageUrl = "~/Graphic/trafficlight_green.png";
}
else if ((int)Session["logInFail"] >= 1)
{
lblLogInCheck.Text = "Du har nu " + Session["logInFail"].ToString() + " försök att logga in innan din dator spärras";
imgLogIn.ImageUrl = "~/Graphic/trafficlight_yellow.png";
}
else
{
lblLogInCheck.Text = "Din dator är nu spärrad, kontakta administratören för att låsa upp den";
Login1.Visible = false;
imgLogIn.ImageUrl = "~/Graphic/trafficlight_red.png";
}
}
}
protected void Login1_LoginError(object sender, EventArgs e)
{
string ip = Request.UserHostAddress.ToString();
Session["logInFail"] = (int)Session["logInFail"] - 1;
if ((int)Session["logInFail"] <= 0)
{
Login1.Enabled = false;
bool result = IpAccess.AddRejectedIp(ip);
}
}
protected void Login1_LoggedIn(object sender, EventArgs e)
{
Session["logInFail"] = 3;
}
</code>Sv: Räknfel
Jag hade nog valt att inte sätta värdet i global.asax utan istället hantera det i logon-sidan. Varför inte göra en koll på sidan ifall sessions-variabeln är null och i så fall hantera det som första försöket?
Sen en personlig åsikt :)
Om du kallar den "logInFail" känns det mer logiskt att räkna nerifrån och upp till ett max antal fel logons. :)
Kanske nedanstående kod funkar? (har inte testat den alls)
protected void Page_Load(object sender, EventArgs e)
{
int myReturn = IpAccess.CheckIp(Request.UserHostAddress);
if (myReturn >= 1)
{
Login1.Enabled = false;
lblRejected.Visible = true;
lblLogInCheck.Visible = false;
imgLogIn.Visible = false;
Session["logInFail"] = 3;
imgLogIn.ImageUrl = "~/Graphic/trafficlight_red.png";
return;
}
else
lblRejected.Visible = false;
// Hantera första besöket
if (Session["logInFail"] == null)
Session["logInFail"] == 0;
lblLogInCheck.Text = "Du har nu " + Session["logInFail"].ToString() + " försök att logga in innan din dator spärras.";
if((int)Session["logInFail"] == 0)
imgLogIn.ImageUrl = "~/Graphic/trafficlight_green.png";
else if ((int)Session["logInFail"] < 3)
imgLogIn.ImageUrl = "~/Graphic/trafficlight_yellow.png";
else
{
lblLogInCheck.Text = "Din dator är nu spärrad, kontakta administratören för att låsa upp den";
imgLogIn.ImageUrl = "~/Graphic/trafficlight_red.png";
Login1.Enabled = false;
}
}
protected void Login1_LoginError(object sender, EventArgs e)
{
string ip = Request.UserHostAddress.ToString();
Session["logInFail"] = (int)Session["logInFail"] + 1;
if ((int)Session["logInFail"] >= 3)
{
Login1.Enabled = false;
bool result = IpAccess.AddRejectedIp(ip);
}
}
protected void Login1_LoggedIn(object sender, EventArgs e)
{
Session["logInFail"] = null;
}