Απαγόρευση login ταυτόχρονα από δύο ή περισσότερους χρήστες.

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
acerbitch
Δημοσιεύσεις: 37
Εγγραφή: 02 Φεβ 2009 11:33

Απαγόρευση login ταυτόχρονα από δύο ή περισσότερους χρήστες.

Δημοσίευση από acerbitch » 26 Σεπ 2012 13:52

Αγαπητά μέλη καλησπέρα,

Φτιάχνω μία εφαρμογή όπου ένας χρήστης μπορεί να κάνει login σε μία σελίδα χρησιμοποιώντας το username του και το password του. Τα στοιχεία του είναι αποθηκευμένα σε έναν πίνακα μίας ΒΔ που περιλαμβάνει τα εξής πεδία: id, username, password (όχι σε MD5).

Αυτό που θέλω να κάνω είναι να απαγορεύσω να συνδέονται ταυτόχρονα παραπάνω από ένας χρήστης. Υπάρχει καμία ιδέα;

Ευχαριστώ!

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1950
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

Απαγόρευση login ταυτόχρονα από δύο ή περισσότερους χρήστες.

Δημοσίευση από vassilism » 26 Σεπ 2012 22:08

Αν υποθέσουμε πως κρατάς το πρώτο login σε μια session, τότε βάλε μια συνθήκη που να ελέγχει τη session και αν βρει ότι υπάρχει login να μην τον αφήνει.

acerbitch
Δημοσιεύσεις: 37
Εγγραφή: 02 Φεβ 2009 11:33

Απαγόρευση login ταυτόχρονα από δύο ή περισσότερους χρήστες.

Δημοσίευση από acerbitch » 26 Σεπ 2012 23:59

vassilism σε ευχαριστώ πολύ για την απάντηση σου. Είναι εύκολο να μου γράψεις ένα παράδειγμα;

Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

Απαγόρευση login ταυτόχρονα από δύο ή περισσότερους χρήστες.

Δημοσίευση από Khronos » 27 Σεπ 2012 09:20

Είναι πιο περίπλοκο απ'όσο φαίνεται (αν κατάλαβα τι ακριβώς εννοείς).
Το πιο απλό είναι να βάλεις ένα πεδίο 'loggedin' που θα κρατάει το αν έχει κάνει ο χρήστης login.
Έτσι κάθε φορά που πάει κάποιος να κάνει login ελέγχεις αν άλλος χρήστης είναι ήδη loggedin και αναλόγως τον αφήνεις ή όχι.

Το θέμα είναι είναι τι γίνεται αν κάποιος κάνει logout όχι πατώντας το κουμπί αλλά κλείνοντας τον browser.
Εκεί χρειάζεσαι κάτι παρόμοιο με το "Πόσοι χρήστες είναι online"
http://www.phpeasystep.com/phptu/9.html

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Απαγόρευση login ταυτόχρονα από δύο ή περισσότερους χρήστες.

Δημοσίευση από Rapid-eraser » 27 Σεπ 2012 10:08

Khronos++
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

acerbitch
Δημοσιεύσεις: 37
Εγγραφή: 02 Φεβ 2009 11:33

Απαγόρευση login ταυτόχρονα από δύο ή περισσότερους χρήστες.

Δημοσίευση από acerbitch » 27 Σεπ 2012 10:56

Ευχαριστώ πολύ Khronos. Είναι όντως λίγο πολύπλοκο το θέμα και δεν έχω βρει κάποια έτοιμη λύση μέχρι τώρα...

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27616
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

Απαγόρευση login ταυτόχρονα από δύο ή περισσότερους χρήστες.

Δημοσίευση από cordis » 27 Σεπ 2012 11:14

παραπάνω από ένας χρήστης με το ίδιο username;
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

acerbitch
Δημοσιεύσεις: 37
Εγγραφή: 02 Φεβ 2009 11:33

Απαγόρευση login ταυτόχρονα από δύο ή περισσότερους χρήστες.

Δημοσίευση από acerbitch » 27 Σεπ 2012 11:30

Καλημέρα cordis! Ναι, αυτό που θέλω είναι να μην μπορούν να κάνουν login δύο χρήστες (ή περισσότεροι) από τον ίδιο λογαριασμό ταυτόχρονα.

Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

Απαγόρευση login ταυτόχρονα από δύο ή περισσότερους χρήστες.

Δημοσίευση από Khronos » 27 Σεπ 2012 11:32

Και πάλι η ίδια λογική είναι. Το πρόβλημα παραμένει στο logout.
Ξαναδιάβασε το παραπάνω link. Αν καταλάβεις τι κάνει θα μπορέσεις να το υλοποιήσεις.

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27616
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

Απαγόρευση login ταυτόχρονα από δύο ή περισσότερους χρήστες.

Δημοσίευση από cordis » 27 Σεπ 2012 12:01

έχεις ένα πεδίο session_id

όταν κάνει login ο ένας το ορίζεις και το βάζεις στην βάση καθώς και σε ένα cookie στον χρήστη.

κάθε φορά που βλέπει μια σελίδα κοιτάς εάν το session_id του cookie είναι ίδιο με την βάση.

αν δεν είναι τον πετάς.

αυτό φυσικά σου λύνει το πρόβλημα να μην είναι 2 ταυτόχρονα μέσα, και όχι να μη μπορεί να μπει ο δεύτερος.
για κάτι τέτοιο προφανώς θα χρειαστείς και Ajax και τεχνικές που περιγράφει ο Khronos.
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Απαγόρευση login ταυτόχρονα από δύο ή περισσότερους χρήστες.

Δημοσίευση από Apostolis_38 » 27 Σεπ 2012 22:27

Το πρόβλημα που περιγράφει ο khronos λύνεται μόνο με ένα πεδίο που κρατάει timestamp Οπως περίπου γίνεται και στο link που παρέθεσε.

Κατά τη γνώμη μου κάνε το εξής:
βάλε ένα πεδίο, έστω logedin, το οποίο θα είναι απο default 0.
Οταν κάποιος κάνει login γύρνα το σε 1.
Σε κάθε login τσεκάρεις user name, password και logedin. Αν κάποιος πάει να μπει και το πεδίο είναι ήδη 1 πέτα τον έξω (ή και τους δύο μαζί, να μάθουν :D )

Τσεκάρεις συνέχεια το timestamp αν είναι idle πάνω από το χρονικό όριο που έχεις θέσει, το οποίο προφανώς θα πρέπει να είναι μικρό.
Αν ξεπεράσει το όριο κάνεις destroy το session και γυρνάς το πεδίο logedin σε 0.
Με αυτό τον τρόπο προφυλάσσεσαι κάπως από το πρόβλημα που αναφέρει ο khronos.
Και για να μην έχεις και παράπονα, εμφάνιζε και ένα javascript μήνυμα οτι "σας πέταξα έξω γιατί λείπατε πολύ ώρα", γιατί με αυτόν τον τρόπο θα πετάς έξω και αυτούς που απλώς βγήκαν στο μπαλκόνι για τσιγάρο..

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Απαγόρευση login ταυτόχρονα από δύο ή περισσότερους χρήστες.

Δημοσίευση από dva_dev » 29 Σεπ 2012 03:35

Αν δεν έχεις βρει κάτι δες και αυτό το (πετσοκομένο) demo από ένα - δοκιμαστικό για πολύ ακόμα :( - project.

Τα αρχεία για τη δημιουργία της βάσης και των βοηθητικών συναρτήσεων είναι μέσα στο φάκελο db του zip αρχείου.

Demo, όχι εδώ, ΕΔΩ

sources σε .zip

acerbitch
Δημοσιεύσεις: 37
Εγγραφή: 02 Φεβ 2009 11:33

Απαγόρευση login ταυτόχρονα από δύο ή περισσότερους χρήστες.

Δημοσίευση από acerbitch » 29 Σεπ 2012 14:03

dva_dev σε ευχαριστώ πολύ! Θα μελετήσω τα αρχεία σου και ελπίζω να τα καταλάβω! :P

Άβαταρ μέλους
Banavas
Script Master
Δημοσιεύσεις: 1367
Εγγραφή: 21 Νοέμ 2004 20:25
Επικοινωνία:

Απαγόρευση login ταυτόχρονα από δύο ή περισσότερους χρήστες.

Δημοσίευση από Banavas » 30 Σεπ 2012 16:53

Η λύση είναι απλή. Ακολουθείς τα βήματα που περιγραφει ο cordis αλλά με μόνη διαφορά ότι αυτός που συνδέεται πετάει έξω αυτόν που ήταν συνδεδεμένος.

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

Επειδή θα γνωρίζει ότι αν δώσει τους κωδικούς του αλλού θα έχει πρόβλημα δεν θα τους δώσει αλλά ούτε θα προσπαθήσει να κάνει δεύτερη σύνδεση αφού θα κλείσει η πρώτη.
Happy coding....
Μάρκος
http://lasernet.gr

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Απαγόρευση login ταυτόχρονα από δύο ή περισσότερους χρήστες.

Δημοσίευση από dva_dev » 30 Σεπ 2012 18:03

To demo που έχω δώσει δείχνει και τα δύο. Και το να μην αφήνει τον 2ο να μπει, και το να πετάει ο 2ος τον 1ο έξω.
Τώρα για να μην έχει session timeouts (στην περίπτωση που δεν αφήνει τον 2ο να μπει), κάθε λίγη ώρα (3 λεπτά) κάνει ένα refresh το session, οπότε μπορείς να πας να κάνεις το τσιγάρο σου (και 2 και 3) με το πάσο σου χωρίς να φοβάσαι μήπως χάσεις τη σύνδεση.
Τώρα αν τύχει κάποια στραβή (βγεί το καλώδιο του δικτύου, κοπεί η σύνδεση στο internet, κοπεί το ρεύμα), το πολύ να μείνεις κλειδωμένος έξω για 5 λεπτά (το default timeout που έχω ορίσει), γιατί το ~25λεπτο που έχει default η php μου φαίνεται πολύ μεγάλο.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες