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

PHP / MySQL / JavaScript: προσθήκη περιορισμένου χρόνου σε seconds να δώσει κάποιος απάντηση σε μια ερώτηση Quiz


philos
Μετάβαση στην απάντηση Απαντήθηκε από Predatorkill,

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

Για να μην εχεις διαφορες με το timezone η πιο σιγουρη λυση ειναι μονο μια πιστευω, εχεις τον δικο σου time server οπου τον ρωτας τι ωρα ειναι, θα ανεβασει και αλλο το latency ομως.

Απο εκει και περα, παιρνεις το timezone του browser, το στελνεις μαζι με την απαντηση το κανεις manipulate ωστε να συμβαδιζει με το timezone του σερβερ και κανεις τη συγκριση.

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

  • Απαντ. 32
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Μα όλα θα γίνουν με την ώρα του server ( <? time(); ?> ). Γιατί να μπλέξει με την ώρα από τον client.

Είτε με SQL είτε με κρυπτογράφηση ο server βλέπει την ώρα στην αποστολή της ερώτησης και θα την συγκρίνει με την current ώρα του server που δόθηκε η απάντηση.

Θέμα latency πόσο να έχει αν μιλάμε για 1 network request. Αν έχει θέμα σημαίνει πως πρέπει να πάει σε καλύτερο μηχάνημα γιατί θα έχει πολλά request/s.

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

Δημοσ. (επεξεργασμένο)
1 ώρα πριν, Predatorkill είπε

Για να μην εχεις διαφορες με το timezone η πιο σιγουρη λυση ειναι μονο μια πιστευω, εχεις τον δικο σου time server οπου τον ρωτας τι ωρα ειναι, θα ανεβασει και αλλο το latency ομως.

Απο εκει και περα, παιρνεις το timezone του browser, το στελνεις μαζι με την απαντηση το κανεις manipulate ωστε να συμβαδιζει με το timezone του σερβερ και κανεις τη συγκριση.

Πως είμαστε τόσο σίγουροι ότι η ώρα του browser συμβαδίζει σε seconds 100% με την ώρα του server; Δεν αναφέρομαι σε time zone ;)

Εκτός αν βάλω σε μια μεταβλητή javascript την ώρα που φόρτωσε η σελίδα του quiz, την ώρα του server και βασίζομαι πάντα σε αυτήν. Δεν είμαι σίγουρος...

1 ώρα πριν, Xvipes είπε

Μα όλα θα γίνουν με την ώρα του server ( <? time(); ?> ). Γιατί να μπλέξει με την ώρα από τον client.

Είτε με SQL είτε με κρυπτογράφηση ο server βλέπει την ώρα στην αποστολή της ερώτησης και θα την συγκρίνει με την current ώρα του server που δόθηκε η απάντηση.

Θέμα latency πόσο να έχει αν μιλάμε για 1 network request. Αν έχει θέμα σημαίνει πως πρέπει να πάει σε καλύτερο μηχάνημα γιατί θα έχει πολλά request/s.

Η καθυστέρηση δεν είναι πάντα θέμα server, μπορεί ο client να έχει προβληματικό δίκτυο. Γι' αυτό λέμε μήπως είναι καλό να στέλνουμε με το ajax call και την ώρα που έγινε αυτό.

Εγώ φυσικά έχω βάλει loading gifακι.

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

3 minutes ago, philos said:

Πως είμαστε τόσο σίγουροι ότι η ώρα του browser συμβαδίζει σε seconds 100% με την ώρα του server; Δεν αναφέρομαι σε time zone ;)

Εκτός αν βάλω σε μια μεταβλητή javascript την ώρα που φόρτωσε η σελίδα του quiz, την ώρα του server και βασίζομαι πάντα σε αυτήν. Δεν είμαι σίγουρος...

Η καθυστέρηση δεν είναι πάντα θέμα server, μπορεί ο client να έχει προβληματικό δίκτυο. Γι' αυτό λέμε μήπως είναι καλό να στέλνουμε με το ajax call και την ώρα που έγινε αυτό.

Εγώ φυσικά έχω βάλει loading gifακι.

Όπως πολύ σωστά λες ο client μπορεί να στείλει ότι θέλει (με θεμιτά ή αθέμιτα μέσα).

Ακόμα και αν βάλεις στην εξίσωση πως θα στείλει και ο client την δικιά του ώρα και έστω κάνεις compare την ώρα που έστειλε με την ώρα που ο server έλαβε την απάντηση πάλι θα πρέπει να έχεις ένα threshold (έστω 15 δευτερόλεπτα) που θα πρέπει να κάνουν overlap για να δεχτείς την απάντηση. Αν τελικά το κάνεις αυτό τότε είναι το ίδιο με το να ανεβάσεις το window που δέχεσαι την απάντηση από 30 σε 45 δευτερόλεπτα, με λίγα λόγια δεν κερδίζεις κάτι.

Αν πας εξ ολοκλήρου με βάσει την ώρα του client έχεις όλα αυτά τα προβλήματα που έχουν αναφερθεί μέχρι στιγμής (timezone, tampering)

Never trust the client.

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

Δημοσ. (επεξεργασμένο)
6 ώρες πριν, Xvipes είπε

Μα όλα θα γίνουν με την ώρα του server ( <? time(); ?> ). Γιατί να μπλέξει με την ώρα από τον client.

Είτε με SQL είτε με κρυπτογράφηση ο server βλέπει την ώρα στην αποστολή της ερώτησης και θα την συγκρίνει με την current ώρα του server που δόθηκε η απάντηση.

Θέμα latency πόσο να έχει αν μιλάμε για 1 network request. Αν έχει θέμα σημαίνει πως πρέπει να πάει σε καλύτερο μηχάνημα γιατί θα έχει πολλά request/s.

Αυτο ελεγα εξαρχης. Μια αλλη λυση θα ηταν να κανει αριθμος ερωτησων * 30 sec και να υπολογισει στο τελος με 15/30 sec διαφορα, θα ειναι με αλλα λογια τεστ 15λεπτου στο συνολο και οχι 30 sec ανα ερωτηση. Βεβαια με αυτο το τροπο μπορει να ξοδεψει περισσοτερο απο 30 sec ανα ερωτηση

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

Δημοσ. (επεξεργασμένο)
16 λεπτά πριν, Predatorkill είπε

Αυτο ελεγα εξαρχης. Μια αλλη λυση θα ηταν να κανει αριθμος ερωτησων * 30 sec και να υπολογισει στο τελος με 15/30 sec διαφορα, θα ειναι με αλλα λογια τεστ 15λεπτου στο συνολο και οχι 30 sec ανα ερωτηση. Βεβαια με αυτο το τροπο μπορει να ξοδεψει περισσοτερο απο 30 sec ανα ερωτηση

χαχα έχω δώσει στον admin δυνατότητα όταν στήνει τις ερωτήσεις να επιλέγει ακριβώς πόσα seconds θέλει να δώσει στο χρήστη για κάθε ερώτηση ξεχωριστά (με step τα 5 seconds / άσχετο).

ok θα τα κάνω όλα σε server side με το $hash που είπαμε (πάντως εγώ θα σώζω ήδη σε db table το session με τις απαντήσεις που έχει δώσει μέχρι στιγμής ο χρήστης) και θα δώσω thresold + / - 15 seconds, εκτός αν κάποιος έχει κάποια καλύτερα ιδέα που προκύψει εντός των ημερών.

Επίσης αν κάποιος από λάθος κάνει page refresh (καθώς το όλο quiz θα διεξάγεται με ajax calls), δε θέλω να χαθεί το session, ωστόσο καλού κακού θα κάνω το σύστημα να χάνει τελείως ο χρήστης την ερώτηση και να φορτώνει την ακριβώς επόμενη με τα 30 seconds της / όσα έχει δώσει ο admin.

Είναι καλή και σαν ιδέα αν κάποιος χάσει τελείως connection και κάνει refresh μετά. Να χάνει απλά την τρέχουσα ερώτηση. ε σε πόσους γκαντέμηδες θα πέσει το σύστημα :P

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

Όσο το σκέφτομαι όλο και πιο λάθος μου φαντάζει το θέμα με τον χρόνο του server. Tο περιθώριο του χρόνου στον οποίο πρέπει να απαντηθεί η ερώτηση είναι ξεκάθαρα θέμα client. Μπορεί να κάνει 20 δευτερόλεπτα να εμφανιστεί η ερώτηση και να ξεκινήσει να μετρά αντίστροφα ο χρόνος από την στιγμή που έγινε η αρχική κλήση της ερώτησης. Τι θα κάνεις σε αυτή την περίπτωση; Αν ο άλλος ξέρει μπορεί να σταματήσει και χρονόμετρα και τα πάντα κατανοητό. Αλλά είναι λίγο μπακάλικη λύση να δίνεις απλά περιθώριο και να πηγαίνεις με βάση τι ώρα ζητήθηκε η ερώτηση. Γιατί μπορεί πάντα να υπάρχει και η εξαίρεση που θα ξεπεράσει τα χρονικά όρια που θέτεις ενώ θα είναι πραγματικά σωστός ο client. Το να βασίζεσαι στον χρόνο του server μπορεί να γίνει σε περιπτώσεις που είσαι βέβαιος ότι η επικοινωνία είναι όντως απροβλημάτιστη, αλλά πάντα τα 30 δευτερόλεπτα πρέπει να τρέχουν με βάση τον χρόνο του client. Και η λύση με το hash προβληματική είναι, γιατί θα γίνεται σύγκριση με τον χρόνο που έγινε το αρχικό submit στον server με το submit της απάντησης. Έστω ότι κάνει 10 δευτερόλεπτα να φορτώσει η ερώτηση και ο χρήστης απαντάει σε 25 δευτερόλεπτα και λόγω κακού upload του client (ή ότι άλλο) κάνει και άλλα 14 δευτερόλεπτα να σταλεί το submit στον server έχουμε σύνολο 49 δευτερόλεπτα. Με τους δικούς σου χρόνους (15 seconds περιθώριο) ο χρήστης δεν πρόλαβε να απαντήσει εντός χρόνου. Τώρα εγώ σου μιλάω για περιπτώσεις μάλλον σπάνιες, αλλά και αυτό πρόβλημα είναι. Εσείς θέλεις το 100% των χρηστών να μπορεί να χρησιμοποιήσει το κουίζ απροβλημάτιστα. Όχι χρήστες που υπό προϋποθέσεις θα καταφέρουν να τρέξουν το κουίζ. 

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

7 hours ago, rafinos said:

Όσο το σκέφτομαι όλο και πιο λάθος μου φαντάζει το θέμα με τον χρόνο του server. Tο περιθώριο του χρόνου στον οποίο πρέπει να απαντηθεί η ερώτηση είναι ξεκάθαρα θέμα client. Μπορεί να κάνει 20 δευτερόλεπτα να εμφανιστεί η ερώτηση και να ξεκινήσει να μετρά αντίστροφα ο χρόνος από την στιγμή που έγινε η αρχική κλήση της ερώτησης. Τι θα κάνεις σε αυτή την περίπτωση; Αν ο άλλος ξέρει μπορεί να σταματήσει και χρονόμετρα και τα πάντα κατανοητό. Αλλά είναι λίγο μπακάλικη λύση να δίνεις απλά περιθώριο και να πηγαίνεις με βάση τι ώρα ζητήθηκε η ερώτηση. Γιατί μπορεί πάντα να υπάρχει και η εξαίρεση που θα ξεπεράσει τα χρονικά όρια που θέτεις ενώ θα είναι πραγματικά σωστός ο client. Το να βασίζεσαι στον χρόνο του server μπορεί να γίνει σε περιπτώσεις που είσαι βέβαιος ότι η επικοινωνία είναι όντως απροβλημάτιστη, αλλά πάντα τα 30 δευτερόλεπτα πρέπει να τρέχουν με βάση τον χρόνο του client. Και η λύση με το hash προβληματική είναι, γιατί θα γίνεται σύγκριση με τον χρόνο που έγινε το αρχικό submit στον server με το submit της απάντησης. Έστω ότι κάνει 10 δευτερόλεπτα να φορτώσει η ερώτηση και ο χρήστης απαντάει σε 25 δευτερόλεπτα και λόγω κακού upload του client (ή ότι άλλο) κάνει και άλλα 14 δευτερόλεπτα να σταλεί το submit στον server έχουμε σύνολο 49 δευτερόλεπτα. Με τους δικούς σου χρόνους (15 seconds περιθώριο) ο χρήστης δεν πρόλαβε να απαντήσει εντός χρόνου. Τώρα εγώ σου μιλάω για περιπτώσεις μάλλον σπάνιες, αλλά και αυτό πρόβλημα είναι. Εσείς θέλεις το 100% των χρηστών να μπορεί να χρησιμοποιήσει το κουίζ απροβλημάτιστα. Όχι χρήστες που υπό προϋποθέσεις θα καταφέρουν να τρέξουν το κουίζ. 

Οπότε τι προτίνεις;

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

5 ώρες πριν, Xvipes είπε

Οπότε τι προτίνεις;

Δεν είναι ότι έχω τη λύση. Αν την είχα φυσικά και θα την είχα πει. Πιθανότατα δεν υπάρχει κάτι που μπορεί να λύσει το πρόβλημα εφόσον μιλάμε πως η όλη φάση τρέχει μέσω browser. Πιθανότατα θα παραμείνει με τις ατέλειές του. Απλά νιώθω ότι καλύτερα οι ατέλειες να έχουν να κάνουν με αυτό που τρέχει στον χρήστη παρά με αυτό που τρέχει στον server. Οπότε θα έλεγα να παίξει με τους χρόνους του client. Να αποθηκεύεται ο αρχικός χρόνος με το που ξεκινήσει η αντίστροφη μέτρηση και να αποθηκεύεται και αυτός του submit ώστε να γίνεται η σύγκριση. Δυστυχώς κάποιος που γνωρίζει θα μπορεί να επέμβει. Ωστόσο και σε αυτή την περίπτωση παρόμοια κατάσταση ισχύει. Πόσοι από τους χρήστες έχουν τις γνώσεις να διαβάσουν τον κώδικα που τρέχει, να βρουν ποιες μεταβλητές πρέπει να αλλάξουν κτλ κτλ κτλ. Ειδικά αν χρησιμοποιηθεί και κώδικας από εξωτερικό αρχείο js και «κρυφτούν» και λίγο οι μεταβλητές μέσα στον κώδικα, νομίζω ότι η περίπτωση να επέμβει κάποιος στον κώδικά είναι λιγότερο συχνός από την καθυστέρηση του server. 

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

Ότι και να βάλεις για να κρύψεις τον κώδικα στο front end την ώρα του network request το payload θα είναι ξεκάθαρο για το τι στέλνει στον server. Ναι δεν μπορούν όλοι να ξέρουν πως να το διαβάσουν και να το αξιοποιήσουν αλλά αυτός που θα μπορέσει θα το κάνει και το χειρότερο είναι πως ο server δεν θα έχει ιδέα αν έγινε αυτό το "exploit".

Πιο ευκολο μου φαίνεται να βάλει ένα service για να βλέπει τι κάνουν οι χρήστες τύπου https://www.highlight.io/ ή https://www.hotjar.com/ και να καταλάβει το ποσοστό αυτών που δεν πρόλαβαν να απαντήσουν λόγο delay του internet τους παρά να αφήσει κάποιον να απαντάει όποτε θέλει(δεδομένου ότι, αν κατάλαβα καλά, είναι πολύ σοβαρό προαπαιτούμενο για την εν λόγω εφαρμογή).

Σίγουρα μπορεί να γίνει fine-tune και να χρησιμοποιηθούν π.χ web sockets για real time επικοινωνία με τον server αλλά επιμένω στη λογική του never trust the client.

(προφανώς σε αυτό το σημείο είμαστε στο στάδιο του κουβέντα να γίνεται και απλά μοιράζομαι γενικά την άποψή μου. Το λέω σε περίπτωση που κάποιος παρεξηγήσει το ύφος μου) 

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

Λοιπόν παιδιά, τελικά: εφόσον κρατάω σε έναν πίνακα "sessions" όλα τα session των χρηστών (ευτυχώς μιλάμε για logged in users με user_id ο καθένας), σώζω για κάθε ερώτηση μέσω php/ mysql το fetch_time όταν την τραβάει και μετά με το submit της απάντησης κάνω σύγκριση με την time() και δίνω και thresold 20 seconds επιπλέον.

Αν για οποιονδήποτε λόγο ξεπεραστεί και το 20 seconds thresold, εμφανίζω μήνυμα να τσεκάρει ο χρήστης τη σύνδεσή του και κουμπί "φόρτωμα επόμενης ερώτησης". Προφανώς ο χρήστης χάνει στο score την ερώτηση για την οποία ξεπέρασε και το 20 seconds thresold. Αν πράγματι έχει διακοπεί η σύνδεση, το "φόρτωμα επόμενης ερώτησης" περιμένει.

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

Έστω ότι ο χρήστης είναι στο quiz ας πούμε στην 3η ερώτηση και μένουν άλλα 20 seconds να δώσει απάντηση.

Μπορείτε να σκεφτείτε μια ιδέα ώστε αν ας πούμε φύγει ξαφνικά από τη σελίδα του quiz και επιστρέψει, να ξανά δει την 3η ερώτηση και το countdown να δείχνει 19...18...17 κτλ;

Πάλι μιλάμε για client side δεδομένα που θα έπρεπε κάπως να πέρναγαν στον server.

Πάντως υπενθυμίζω ότι κρατάω τα sessions, ότι υπάρχει η τεχνολογία των cookies κτλ, αλλά δε μπορώ να σκεφτώ κάτι ασφαλές.

Δεν ξέρω κιόλας αν θα ήταν θεμιτό να κάνω ajax call κάθε 3 seconds στον server και να σώζω το time() του question_id, ώστε αν ο χρήστης φύγει από τη σελίδα και επιστρέψει, να του πλασάρω το σωστό count-down, έστω και με μαξ απόκλιση 3 seconds + server response και φυσικά με όλους τους απαραίτητους ελέγχους για την ώρα που θα δώσει απάντηση, με το thresold 20 seconds κτλ.

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

Στις 7/10/2023 στις 10:23 ΜΜ, philos είπε

Τα εργαλεία μας είναι τα παραπάνω (PHP/MySQL/JavaScript/jQuery), pls μην με προωθήσετε σε τίποτα τρελές τεχνολογίες που θα πρέπει να διαβάσω ολόκληρο documentation μόνο για ένα χαρακτηριστικό σαν το παραπάνω, εκτός αν πραγματικά δε βγαίνει αλλιώς. :P

composer create-project laravel/laravel my-first-quiz-project

Κολλας σε τεχνικα πραματα ενω θα επρεπε να κολλας σε θεμετα που εχουν να κανουν με το παιχνιδι. Πχ επιπεδο δυσκολιας, καταταξη παιχτων κλπ. 

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

Δημοσ. (επεξεργασμένο)
11 ώρες πριν, philos είπε

Λοιπόν παιδιά, τελικά: εφόσον κρατάω σε έναν πίνακα "sessions" όλα τα session των χρηστών (ευτυχώς μιλάμε για logged in users με user_id ο καθένας), σώζω για κάθε ερώτηση μέσω php/ mysql το fetch_time όταν την τραβάει και μετά με το submit της απάντησης κάνω σύγκριση με την time() και δίνω και thresold 20 seconds επιπλέον.

Αν για οποιονδήποτε λόγο ξεπεραστεί και το 20 seconds thresold, εμφανίζω μήνυμα να τσεκάρει ο χρήστης τη σύνδεσή του και κουμπί "φόρτωμα επόμενης ερώτησης". Προφανώς ο χρήστης χάνει στο score την ερώτηση για την οποία ξεπέρασε και το 20 seconds thresold. Αν πράγματι έχει διακοπεί η σύνδεση, το "φόρτωμα επόμενης ερώτησης" περιμένει.

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

Έστω ότι ο χρήστης είναι στο quiz ας πούμε στην 3η ερώτηση και μένουν άλλα 20 seconds να δώσει απάντηση.

Μπορείτε να σκεφτείτε μια ιδέα ώστε αν ας πούμε φύγει ξαφνικά από τη σελίδα του quiz και επιστρέψει, να ξανά δει την 3η ερώτηση και το countdown να δείχνει 19...18...17 κτλ;

Πάλι μιλάμε για client side δεδομένα που θα έπρεπε κάπως να πέρναγαν στον server.

Πάντως υπενθυμίζω ότι κρατάω τα sessions, ότι υπάρχει η τεχνολογία των cookies κτλ, αλλά δε μπορώ να σκεφτώ κάτι ασφαλές.

Δεν ξέρω κιόλας αν θα ήταν θεμιτό να κάνω ajax call κάθε 3 seconds στον server και να σώζω το time() του question_id, ώστε αν ο χρήστης φύγει από τη σελίδα και επιστρέψει, να του πλασάρω το σωστό count-down, έστω και με μαξ απόκλιση 3 seconds + server response και φυσικά με όλους τους απαραίτητους ελέγχους για την ώρα που θα δώσει απάντηση, με το thresold 20 seconds κτλ.

Ασφαλές δεν είναι, αλλά μπορείς να χρησιμοποιήσεις μεταβλητές localStorage. Οι μεταβλητές localStorage είναι αποθηκευμένες μέχρι να κάνει ο χρήστης clear τα data του browser (οπότε σε περίπτωση private mode χάνονται μαζί με το παράθυρο που κλείνει). Επίσης, ναι ο χρήστης αν ξέρει javascript μπορεί να επέμβει σε αυτές, αλλά από την στιγμή που έχεις την δική σου δικλείδα ασφαλείας με τα 20 δευτερόλεπτα κτλ δεν σε πολύ ενδιαφέρει. Εσένα σε νοιάζει να συνεχίσει ο χρόνος για τον χρήστη από εκεί που ήταν όταν έκλεισε το παράθυρο. 

Π.χ. αν ο συνολικός χρόνος αποθηκεύεται στην μεταβλητή time τότε μπορείς να περνάς το time σε μια localstorage. 

let time = 30;

localStorage.setItem("remaining_time",""+time); //Είναι πάντα string... Και σε κάθε αλλαγή του time βάζεις ακριβώς αυτή την γραμμή κώδικα

Και αν ανοίξει ο χρήστης ξανά το παράθυρο εφόσον είναι ανοιχτό το session τσεκάρεις αν υπάρχει remaining_time κάπως έτσι:

let remaining_time = parseInt(localStorage.getItem("remaining_time"));

if (remaining_time > 0) {
	//τρέξε την ερώτηση με τον χρόνο του remaining_time κτλ
	//κάλλιστα μπορείς να αποθηκεύσεις και άλλα στοιχεία σε μια localStorage όπως ο αριθμός της ερώτησης και ότι άλλο θέλεις
	//μπορείς να αποθηκεύσεις και ολόκληρο πίνακα ή object με JSON.stringify() για αποθήκευση ως string και να διαβάσεις το string με JSON.parse()
}

 

Επεξ/σία από rafinos
  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αυτό που θέλω να πω χωρίς να έχω διαβάσει αναλυτικά όλες τις απαντήσεις είναι ότι το 'REQUEST_TIME' είναι μέσα στην global _SERVER και δεν χρειάζεται να καλείς ξεχωριστές συναρτήσεις. Στο πρώτο δηλαδή request θα πάρεις το start_time και θα το αποθηκεύσεις σε μια μεταβλητή start_time = $_SERVER[''REQUEST_TIME'] και η διαφορά είναι $_SERVER[''REQUEST_TIME'] -start_time

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

Δημοσ. (επεξεργασμένο)
2 ώρες πριν, k33theod είπε

Αυτό που θέλω να πω χωρίς να έχω διαβάσει αναλυτικά όλες τις απαντήσεις είναι ότι το 'REQUEST_TIME' είναι μέσα στην global _SERVER και δεν χρειάζεται να καλείς ξεχωριστές συναρτήσεις. Στο πρώτο δηλαδή request θα πάρεις το start_time και θα το αποθηκεύσεις σε μια μεταβλητή start_time = $_SERVER[''REQUEST_TIME'] και η διαφορά είναι $_SERVER[''REQUEST_TIME'] -start_time

Η τελευταία if μου είναι αυτή:

// 20 seconds thresold
if (time() - $question_fetch_time >= ($session->getQuestionGivenSeconds($current_question) + 20))
{
	// invalid
}

Λες δλδ αντί για την time() στη παραπάνω συνθήκη να βάλω την $_SERVER[''REQUEST_TIME'];

H $question_fetch_time έχει την timestamp της ώρας που ο browser έλαβε / έκανε κλήση της ερώτησης (είχε αποθηκευτεί στο πρώτο ajax call).

Η παραπάνω if τρέχει όταν ο χρήστης δίνει την απάντηση για να δει αν είναι στα χρονικά περιθώρια (δεύτερο ajax call).

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

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

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