χρόνος παραμονής επισκέπτη/χρήστη σε συγκεκριμένη σελίδα

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

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

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

χρόνος παραμονής επισκέπτη/χρήστη σε συγκεκριμένη σελίδα

Δημοσίευση από skeftomilos » 07 Οκτ 2007 19:33

Στο client-side κομμάτι δεν έχεις πολλά να κάνεις. Ούτε πολλά μετρήματα, ούτε να αναλύεις το response του server, τίποτα απ' αυτά. Απλά κάνεις το request, και προγραμματίζεις το επόμενο μετά από 10 sec. Κάπως έτσι δηλαδή:

Κώδικας: Επιλογή όλων

function sendRequest() {
  setTimeout(sendRequest, 10000)
  ...
}

setTimeout(sendRequest, 10000)
Εκεί που είναι οι τρεις τελίτσες μπαίνει ο κώδικας που στέλνει το AJAX request, και είσαι έτοιμος.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

erateini
Δημοσιεύσεις: 36
Εγγραφή: 11 Ιούλ 2007 20:10

χρόνος παραμονής επισκέπτη/χρήστη σε συγκεκριμένη σελίδα

Δημοσίευση από erateini » 07 Οκτ 2007 19:57

ναι αλλά πώς θα μετράω το χρόνο και πού θα μπαίνει ο κώδικας αυτός?

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

χρόνος παραμονής επισκέπτη/χρήστη σε συγκεκριμένη σελίδα

Δημοσίευση από skeftomilos » 07 Οκτ 2007 20:31

Το 10000 είναι χιλιοστά του δευτερολέπτου. :-) Διάβασε για την setTimeout για να δεις πώς δουλεύει. Ο κώδικας μπαίνει μέσα σε <script></script> στο <head> της σελίδας.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

erateini
Δημοσιεύσεις: 36
Εγγραφή: 11 Ιούλ 2007 20:10

χρόνος παραμονής επισκέπτη/χρήστη σε συγκεκριμένη σελίδα

Δημοσίευση από erateini » 07 Οκτ 2007 20:38

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

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

χρόνος παραμονής επισκέπτη/χρήστη σε συγκεκριμένη σελίδα

Δημοσίευση από skeftomilos » 07 Οκτ 2007 20:52

Αν μια σελίδα σου έστειλε συνολικά 3 requests, σημαίνει ότι ήταν ανοιχτή για διάστημα μεταξύ 30 και 40 δευτερολέπτων. Δε μπορείς να ξέρεις το χρονικό διάστημα με απόλυτη ακρίβεια. Μπορείς να μειώσεις το interval στη setTimeout σε 5 sec (ή λιγότερο), αλλά το κέρδος σε ακρίβεια το πληρώνεις με extra processing στον server.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

erateini
Δημοσιεύσεις: 36
Εγγραφή: 11 Ιούλ 2007 20:10

χρόνος παραμονής επισκέπτη/χρήστη σε συγκεκριμένη σελίδα

Δημοσίευση από erateini » 07 Οκτ 2007 20:56

Κατάλαβα. Βασικά το extra processing εντάξει δεν με πειράζει, γιατί θέλω αρκετή ακρίβεια, αλλά αυτά τα 3 requests για παράδειγμα που λες κι εσύ, πού αποθηκεύονται?

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

χρόνος παραμονής επισκέπτη/χρήστη σε συγκεκριμένη σελίδα

Δημοσίευση από skeftomilos » 07 Οκτ 2007 21:01

Στη βάση δεδομένων! Μη με ρωτάς πώς και τι, σου είπα ότι στο server-side κομμάτι δεν είμαι ο κατάλληλος να σου δώσω συμβουλές.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

erateini
Δημοσιεύσεις: 36
Εγγραφή: 11 Ιούλ 2007 20:10

χρόνος παραμονής επισκέπτη/χρήστη σε συγκεκριμένη σελίδα

Δημοσίευση από erateini » 07 Οκτ 2007 21:06

βασικά δε ρωτάω για server-side. Κοίταξε. Για να βάλω εγώ κάτι στη database χρειάζομαι μία μεταβλητή. Αυτή δηλαδή που θα περιέχει το χρόνο! Αυτή όμως η php μεταβλητή πρέπει να συνδέεται με όλη αυτή τη javascript που λέμε τόση ώρα! Άρα λογικά με μία τιμή javascript η οποία θα περιέχει το χρόνο! Αυτή την "μεταβλητή" ψάχνω να βγάλω απτα λεγομένά σου, κατάλαβες?

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

χρόνος παραμονής επισκέπτη/χρήστη σε συγκεκριμένη σελίδα

Δημοσίευση από skeftomilos » 07 Οκτ 2007 21:16

Νομίζω ότι δεν έχεις πιάσει το point μέχρι τώρα. Δεν πρόκειται η JavaScript να σου πει την ώρα, απλά εκτελεί μια επαναλαμβανόμενη ενέργεια, την οποία εσύ μετράς server-side. Κατά τον ίδιο τρόπο που δε ρωτάς την καρδιά σου να σου πει με τι ρυθμό χτυπάει, αλλά μετράς το διάστημα ανάμεσα στους χτύπους της με ένα χρονόμετρο. :-)
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

erateini
Δημοσιεύσεις: 36
Εγγραφή: 11 Ιούλ 2007 20:10

χρόνος παραμονής επισκέπτη/χρήστη σε συγκεκριμένη σελίδα

Δημοσίευση από erateini » 07 Οκτ 2007 21:23

Η αλήθεια είναι ότι δεν τα είχα τελείως ξεκάθαρα και περίμενα η javascript να μου βγάλει ένα αποτέλεσμα. Αλλά νομίζω καταλαβαίνω τι λες. Ξέρεις όμως να μου πεις πως θα γίνει αυτή η μεταφορά από τα requests στο server-side?

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

χρόνος παραμονής επισκέπτη/χρήστη σε συγκεκριμένη σελίδα

Δημοσίευση από skeftomilos » 07 Οκτ 2007 21:37

Υποθέτω ότι για κάθε σελίδα που θα ζητάει ένας χρήστης θα εισάγεις μια εγγραφή στη βάση που θα έχει το χρόνο παραμονής του χρήστη στη σελίδα. Αρχική η τιμή του πεδίου θα είναι 0. Σε κάθε request που θα έρχεται θα αυξάνεις την τιμή του πεδίου κατά 10. Όσο η σελίδα παραμένει ανοιχτή, τόσο θα αυξάνεται η τιμή. Όταν η σελίδα κλείσει, η τιμή θα πάψει να αυξάνεται.

Το μόνο πρόβλημα που απομένει είναι η αντιστοίχηση σελίδας και εγγραφής στη βάση. Αφού για κάθε αίτημα θα έχεις και μία εγγραφή, μπορείς να εκμεταλευτείς το id αυτής της εγγραφής ως σημάδι ταυτοποίησης. Αυτό το id μπορείς να το περάσεις από την PHP στην JavaScript κάπως έτσι:

Κώδικας: Επιλογή όλων

<script>var REQUEST_ID = <? php echo $id ?></script>
...ώστε στη σελίδα να γραφεί:

Κώδικας: Επιλογή όλων

<script>var REQUEST_ID = 11507</script>
Αυτή την τιμή θε πρέπει να την ξαναστείλεις πίσω στα request που θα κάνεις με AJAX. Αν τα request είναι GET τότε θα την βάλεις στο querystring:

Κώδικας: Επιλογή όλων

var remoteUrl = 'http&#58;//www.myserver.gr/spy.php?id=' + REQUEST_ID
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

erateini
Δημοσιεύσεις: 36
Εγγραφή: 11 Ιούλ 2007 20:10

χρόνος παραμονής επισκέπτη/χρήστη σε συγκεκριμένη σελίδα

Δημοσίευση από erateini » 07 Οκτ 2007 21:53

Την αντιστοίχηση με την εγγραφή θα την κάνω εγώ (αλλιώς). Το θέμα είναι πώς θα αυξάνω την τιμή του πεδίου σε κάθε request. Πώς δηλαδή θα καταλαβαίνει ο server-side κώδικας ότι πρόκειται για request?

erateini
Δημοσιεύσεις: 36
Εγγραφή: 11 Ιούλ 2007 20:10

χρόνος παραμονής επισκέπτη/χρήστη σε συγκεκριμένη σελίδα

Δημοσίευση από erateini » 07 Οκτ 2007 22:06

Ααααααα!! Βασικά νομίζω το 'πιασα! λογικά θα τεστάρει τη συνάρτηση της JavaScript, αν δηλαδή δίνει σήμα, και αναλόγως θα αυξάνει +10 στην εγγραφή με server-side. Πώς όμως θα την τσεκάρει? Το τσεκ πρέπει να γίνεται εκτός της JavaScript.

Άβαταρ μέλους
dik_
Δημοσιεύσεις: 476
Εγγραφή: 07 Ιουν 2007 11:28

χρόνος παραμονής επισκέπτη/χρήστη σε συγκεκριμένη σελίδα

Δημοσίευση από dik_ » 07 Οκτ 2007 22:45

Η javascript θα σκουντάει την PHP στο server σου κάθε 10 sec με το XMLHttpRequest. Θα στέλνεις δηλαδή το ID που σου πρότεινε ο σκεφτόμυλος παραπάνω κάθε 10', έστω στο http://www.myserver.gr/spy.php.

Εσύ τώρα στο spy.php, θα έχεις ένα query στη DB σου κάπως έτσι:

Κώδικας: Επιλογή όλων

"UPDATE page_times SET time=time+10 WHERE id=".$_GET&#91;'id'&#93;; // ή $_POST, ανάλογα...

erateini
Δημοσιεύσεις: 36
Εγγραφή: 11 Ιούλ 2007 20:10

χρόνος παραμονής επισκέπτη/χρήστη σε συγκεκριμένη σελίδα

Δημοσίευση από erateini » 08 Οκτ 2007 01:46

Τώρα το κατάλαβα το id.. Και έπιασα τι παίζει...
Μπορεί μήπως κάποιος να στείλει τον κώδικα γιατί το βλέπω να ρωτάω κι άλλα... ! :-(

Αν δεν είναι πολύ κόπος... Ευχαριστώ πάντως!

Απάντηση

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

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

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