Γιατί? Πως είσαι σίγουρος ότι ο χρήστης δεν δοκίμασε απλά να συνδεθεί από άλλο υπολογιστή? Ή ότι δεν έπεσε η σύνδεση του και προσπαθεί τώρα να συνδεθεί με νέα σύνδεση και συνεπώς άλλο IP?
Αν τα έχεις σκεφτεί αυτά, νομίζω ο καλύτερος τρόπος είναι να φτιάξεις ένα δικό σου provider ο οποίος θα κληρονομεί από τον SqlMembershipProvider και θα κάνει μόνο override την ValidateUser. Εκεί μέσα μπορείς να ελέγξεις αν ο χρήστης είναι ήδη online ή όχι, π.χ.
public class MySqlMembershipProvider:SqlMembershipProvider
{
public override bool ValidateUser(string username, string password)
{
if (base.GetUser(username, false).IsOnline)
return false;
return base.ValidateUser(username, password);
}
}
Έτσι μπορείς να κρατήσεις τις σελίδες σου όπως είναι, αν και καλό θα είναι να αλλάξεις το μήνυμα που δείχνεις στο χρήστη όταν αποτυγχάνει το login. Αν χρησιμοποιείς το login control, αυτό γίνεται στο LoginError event:
protected void Login1_LoginError(object sender, EventArgs e)
{
if (Membership.GetUser(Login1.UserName,false).IsOnline)
Login1.FailureText = "You can't login right now. Please wait";
else
Login1.FailureText = "Incorrect username or password";
}
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos