Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Locking the database.

Îåêßíçóå áðü ôï ìÝëïò epp1123. Τελευταία δημοσίευση από το μέλος epp1123 στις 28-07-2008, 22:23. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  25-07-2008, 14:27 43686

    Locking the database.

    Καλησπέρα, τι κάνετε;

    Έχω μία ερώτηση κρίσεως η οποία λέει το εξής:

    Έστω ότι καταφέρνω και φτιάχνω τον custom membership provider, και δουλέψει. Με την βάση τι γίνεται, μετά το επιτυχημένο login του χρήστη; Θα πρέπει να κάνω κάποιο lock για να αντιμετωπίσω κάποιο πιθανό concurrency, ή αυτά τα κάνει μόνο του η asp.net με κάποιον τρόπο, ή δε χρειάζεται καθόλου να γίνει κάποιου τέτοιου είδους ενέργεια, είτε από εμένα προγραμματιστικά είτε από το framework;
  •  25-07-2008, 16:35 43694 σε απάντηση της 43686

    Απ: Locking the database.

    Τι ακριβώς εννοείς όταν λες "locking";

    Ο membership provider θα σου δώσει την δυνατότητα να ξέρεις ποιός χρήστης είναι logged in στην εφαρμογή σου (και αν υλοποίησεις και role provider και τι δικαιώματα έχει) και να υποστηρίξεις λειτουργίες login, logoff, change password κλπ.

    Επίσης, σε συνδυασμό με το authorization και το authentication του web.config θα μπορείς να αποτρέπεις την πρόσβαση σε χρήστες που δεν είναι logged in στο σύστημα σου ή που δεν έχουν συγκεκριμένους ρόλους.

    Αν με locking εννοεις το να επιτρέπεις μονο ενα χρήστη την φορά να αλλάζει τα δεδομένα της βάσης σου, τότε αυτό είναι κάτι που θα χρειαστεί να υλοποιήσεις μόνος σου, με βάση το ακριβώς θέλεις να κάνει το σύστημα σου.

    Δημοσθένης Στελλάκης

     

     

  •  26-07-2008, 09:54 43703 σε απάντηση της 43694

    Απ: Locking the database.

    Πράγματι, τί εννοείς? Το να τροποποιεί μόνο ένας χρήστης τη φορά τη βάση μου φαίνεται υπερβολικά .... υπερβολικό. Όλα τα web sites φτιάχνονται για να χρησιμοποιηθούν από πολλούς χρήστες και θα πρέπει να σχεδιάζονται έτσι ώστε ούτε να απαιτούν την αποκλειστική χρήση ούτε να επηρεάζονται όταν δουλεύουν πολλοί χρήστες μαζί.

    Μήπως εννοείς να μην μπορεί κάποιος να κάνει login δεύτερη φορά αν δεν έχει ήδη κάνει logout?


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  28-07-2008, 12:25 43736 σε απάντηση της 43686

    Απ: Locking the database.

    Ναι να μην μπορεί να κάνει login από άλλον υπολογιστή, αυτό εννοώ
  •  28-07-2008, 22:00 43753 σε απάντηση της 43736

    Απ: Locking the database.

    Γιατί? Πως είσαι σίγουρος ότι ο χρήστης δεν δοκίμασε απλά να συνδεθεί από άλλο υπολογιστή? Ή ότι δεν έπεσε η σύνδεση του και προσπαθεί τώρα να συνδεθεί με νέα σύνδεση και συνεπώς άλλο 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
  •  28-07-2008, 22:23 43755 σε απάντηση της 43753

    Απ: Locking the database.

    Χρησιμοποιώ ένα πεδίο στη βάση, το οποίο ονομάζεται isLoggedIn, και αν είναι true δεν τον αφήνει να μπει από άλλο υπολογιστή. Βέβαια στην περίπτωση που πέσει το ρεύμα, η κάτι γίνει, και δεν κάνει σωστό logout για να πάρει το πεδίο την τιμή false, δεν ξέρω τι να κάνω.

    Το membership provider τον έφτιαξα και είναι custom. Δικό μου δημιούργημα 100%.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems