Προς το περιεχόμενο

Εκτέλεση Κώδικα όταν κάποιος Φύγει από το Site


UserX

Προτεινόμενες αναρτήσεις

Το πρόβλημα μου είναι λίγο ώς πολύ γνωστό στον κύκλο των Web Developers. Απλά δεν βρήκα ώς τώρα μια λύση να με ικανοποιήσει και να δουλείευ σωστά.

 

Όταν κάποιος χρήστης μπεί στο site moy και κάνει logiν δημιουργείτε μια εγγραφή στον πίνακα UsersOnline η οποία περιέχει την IP του, το Username του και την ημερομηνία που μπήκε. Αν ο χρήστης βγεί από το site, είτε κλείνωντας απότομα τον browser, είτε κλείνωντας το PC του, είτε μπαίνωντας απλά σε άλλο site, δεν σβήνεται η εγγραφή από τον πίνακα με αποτέλεσμα να δείχνει σε άλλους χρήστες ότι είναι online.

 

Δοκίμασα την πιο αποτελεσματική λύση, με javascript, όταν ο χρήστης βγεί, να υπάρχει στο body η εντολή onpageunload= και να τρέχει ένα scriptaki το οποίο να τον κάνει redirect σε μια σελίδα όπου κλείνω το session,σβήνω τον χρήστη από τον πίνακα usersonline και κλείνω το παράθυρο. Αυτό δουλεεύει σε όλες τις περιπτώσεις.

 

Τι γίνεται όμως άν ο χρήστης έχει ένα firewall ή κάποιο πρόγραμμα που κόβει τα popups? (γιατί αυτό συμπεριφέρεται σαν popup, αφού ο χρήστης έχει βγεί από to site)

 

Εαν γνωρίζετε κάποια άλλη καλύτερη λύση, θα εκτιμούσα να την ακούσω. Ευχαριστώ.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δοκίμασες καθόλου να παίξεις με AJAX και onunload ή onbeforeunload;

 

Δεν έχει τύχει να το δοκιμάσω. Λίγο search που έκανα στο google κάποιοι λένε οτι λειτουργεί, κάποιοι ότι συνήθως δεν προλαβαίνει να κάνει το call back στο server.

 

π.χ. http://episteme.arstechnica.com/groupee/forums/a/tpc/f/6330927813/m/921003644731/inc/-1

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Καλημέρα φίλε μου. Λοιπόν έψαξα για το AJAX. Πολύ ενδιαφέρουσα προσέγγιση! ΕΙδικά οι μάγκες του google έχουν κάνει παπάδες με την τεχνολογία αυτή.

 

Το πρόβλημα είναι ( το αναφέρει και κάποιος σε ένα site που βρήκα) ότι ακόμη και αυτό θέλει συνέχεια refresh της σελίδας για να δουλέψει. Αυτό φυσικά είναι ότι χειρότερο για τα resources του server. Ειδικά αν έχεις πολλούς επισκέπτες.

 

Η μόνη λύση που σκέφτηκα, είναι μια εξωτερική εφαρμογή γραμμένη σε C ή Delphi ή και VB.NET η οποία θα τρέχει πάντα και θα ελέγχει το session object. Αν βρίσκει ότι κάποιο session έχει σβηστεί ( αν κάποιος χρήστης βγεί, κλείσει το browser, κλείσει το pc, κτλ, θα σβηστεί το session του μετά από κάποια δευτερόλεπτα) τότε θα ενημερώνει αυτόματα την βάση, τον πίνακα users online. Η εφαρμογή αυτή θα τρέχει στο system tray μόνιμα.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Νομίζω οτι προσπαθείς να τετραγωνίσεις τον κύκλο, και οταν -αν- τα καταφέρεις, θα εχεις πρόβλημα που ο κυκλος δεν ειναι πιά κυκλος.

Η φυση του http ειναι αυτή. ασυνγχρονη.

Aν θελαμε Real time καταστασεις, θα φτιαχναμε ολο το σαιτ σε καποιο συστημα Java applets

 

"φεύγω απο το σαιτ" μπορει να γινει με τοσους τρόπους, και μερικα απ αυτα ειναι συζητησιομο αν αποτελουν "εξοδο". πως θα τα πιάσεις;

 

log off from site = to normal,

open link from your site to other site,

delete cookie,

close browser,

open favorite,

disconnect modem/shutdown pc/cold reset pc

enter a url in the address bar (μπορει να ξαναγυρισω πατωντας back, μπορει και οχι)

 

Μπαινω σε μια σελιδα του σαιτ σου, αρχιζω να διαβαζω κατι, και αφηνω το pc ανοιχτο, και τον browser σε αυτη τη σελιδα, και φευγω απο το σπιτι (εχω απο πισω to p2p να κατεβαζει). Ειμαι παρόν?

 

κλπ...

 

-------------

 

Μια ιδεα:

Μολις κανω login, (ή ξαναμπω στο σαιτ με cookie απο παλιο login) με γραφεις στον πινακα online users με ημ/νια system date/time.

καθε φορά που θα κανω klik, post, get, refresh στο σαιτ σου μου ανανεωνεις το χρόνο (update column last_seen = System_time ).

 

και οταν θελεις να παρουσιασεις τους online users, κανεις select from table where last_seen = System_time μείον Χ minutes.

 

πχ. χ = 15 λεπτά.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

random, πολύ καλή ιδέα!!!! Χίλια ευχαριστώ! Δεν το σκέφτηκα κάν αυτό! Να έπαιζα με τις ημερομηνίες! Έτσι μπορώ να βλέπω και πόση ώρα έκατσε κάποιος στο site (αφαιρώντας την ημερομηνία LastLoginDate από την ημερομηνία LastSeenDate!) Το εφάρμοσα ήδη. Τώρα το μόνο προβληματάκι είναι ότι για να ΄πιάνω περιόδους μεγάλου idle στον server (π.χ. αν κάποιος διαβάζει ένα μεγάλο κείμενο και μένει πολύ ώρα στην ίδια σελίδα) θα πρέπει να ελέγχο διαφορά μεταξύ των 2 ημερομηνιών της τάξεως των 15 λεπτών για να είμαι καλυμένος. Οπότε αν κάποιος φύγει, θα τον δείξει offline μετά από 15 λεπτά. Δεν πειράζει όμως, μου αρκεί να ανανεώνεται η λίστα σωστά, και όχι βάση cookies και session objects.

 

Το μόνο πρόβλημα είναι ότι σε κάθε σελίδα θα πρέπει να γίνεται update του πίνακα members και σε κάθε σελίδα επίσης θα πρέπει να έχω ένα select που θα ψάχνει σε ολόκληρο τον πίνακα των members για να επιστρέφει΄αυτούς που είναι online. Δεν ξέρω κατά πόσο θα είναι αυτό γρήγορο ή θα καθυστερεί μετά από 5000-10000 members στην βάση.

 

Όπως και να έχει το κολπάκι σου δουλείευ άψογα, όσο το δοκίμασα!

 

Και πάλι ευχαριστώ.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 2 εβδομάδες αργότερα...

Και να επανέρθω με μια νέα απορία σχετική!!!

 

Λοιπόν έκανα όλα τα παραπάνω αλλά έχω το εξής πρόβλημα:

 

Θέλω όταν κάποιος χρήστης κάνει login στην σελίδα μου, να μήν μπορεί κάποιος άλλος να κάνει login από κάπου αλλού με το ίδιο account!

 

Με το κόλπο lastseen δεν δουλεύει διότι, αν κάποιος μείνει idle μέχρι να κλείσει το session από τον server, σε μια σελίδα, και δεν μπεί κάπου αλλού, τότε δεν ανανεώνεται το last seen. Με λίγα λόγια φένεται offline και όταν κάποιιος άλλος πάει να μπεί, τον αφήνει να κάνει login με το ίδιο account.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

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

  • Δημιουργία νέου...