[Powered by Google Translate] [PHP Sessions] [Tommy MacWilliam, Πανεπιστήμιο Χάρβαρντ] [Αυτό είναι CS50.] [CS50.TV] Συνεδρίες σε PHP μπορεί να χρησιμοποιηθεί για την υλοποίηση της λειτουργικότητας, όπως logins χρηστών, web app σας. Συνεδρίες PHP σας επιτρέπουν να συνδέσει πληροφορίες με όλη περιήγησης του χρήστη και όχι απλώς μία μόνο σελίδα. Έτσι, αυτό σημαίνει ότι ο χρήστης επισκέπτεται διάφορες σελίδες PHP που απαρτίζουν την ιστοσελίδα σας, κάθε πληροφορία στη συνεδρία θα συνεχιστεί. Έτσι ώστε να σημαίνει ότι τα δεδομένα που αποθηκεύονται στη συνεδρία κατά μία σελίδα μπορεί αργότερα να προσεγγιστεί από μια άλλη σελίδα. Την αποθήκευση πληροφοριών σε μια συνεδρία είναι εύκολο, και εμείς να το πράξουν μέσω το σύμβολο του δολαρίου, υπογραμμίζουν, μεταβλητού κεφαλαίου ΣΥΝΕΔΡΙΑ. Σύμβολο του δολαρίου, υπογραμμίζουν, ΣΥΝΕΔΡΙΑ-όπως ακριβώς και το σύμβολο του δολαρίου, υπογραμμίζουν, GET και το σύμβολο του δολαρίου, υπογραμμίζουν, POST- είναι ένας associative πίνακα που αποτελείται από βασικά ζεύγη αξίας. Έτσι, μπορούμε να χρησιμοποιήσουμε σύνταξη που μοιάζει με το σύμβολο του δολαρίου, υπογραμμίζουν, ΣΥΝΕΔΡΙΑ, βραχίονα, παραθέτω, foo, παραθέτω, βραχίονα, ισούται με, παραθέτω, μπαρ, παραθέτω- για να αποθηκεύσετε την τιμή "bar" στο πλήκτρο "foo". Ωστόσο, για να μπορέσουμε να γράψει ή να διαβάσει από τον πίνακα συνεδρία, θα πρέπει να καλέσετε μια ειδική λειτουργία- συνεδρία, υπογραμμίζουν, ξεκινήστε, () - και αυτό θα προετοιμάσει τη σύνοδο. Έτσι, ας ρίξουμε μια ματιά σε ένα παράδειγμα. Η πρώτη μας σελίδα, hello.php, χρησιμοποιεί τη σύνοδο για έξοδο κάποια στοιχεία για τον χρήστη. Θυμηθείτε, θα πρέπει να χρησιμοποιήσετε session_start πριν μπορούμε να έχουμε πρόσβαση οποιαδήποτε δεδομένα συνεδρία. Τώρα είμαστε με isset PHP προκειμένου να διαπιστωθεί εάν υπάρχει ένα βασικό στο $ _SESSION associative array. Εάν υπάρχει αυτό το κλειδί, αυτό σημαίνει ότι ο χρήστης έχει συνδεθεί, έτσι θα εμφανίσει το όνομα του χρήστη. Αν δεν υπάρχει αυτό το κλειδί, αυτό σημαίνει ότι ο χρήστης δεν έχει συνδεθεί ακόμα, έτσι θα επιδείξει μια σύνδεση με login.php. Έτσι, ας ρίξουμε μια ματιά στο login.php. Εδώ κάτω, έχουμε μια ενιαία μορφή HTML με μία μόνο είσοδο. Χαρακτηριστικό δράση της φόρμας είναι $ _SERVER ['PHP_SELF »], και αυτό σημαίνει απλά ότι θέλουμε το έντυπο που θα υποβληθεί στο τρέχον αρχείο, η οποία, στην περίπτωση αυτή, είναι login.php. Οπότε ας πάμε πίσω στην κορυφή αυτού του αρχείου. Εάν ο χρήστης υπέβαλε τη μορφή, τότε θα πρέπει να οριστεί $ _POST ['name']. Για περισσότερες πληροφορίες σχετικά με τις φόρμες HTML και μετά, ελέγξτε την ανάπτυξη Ιστού PHP βίντεο. Στην περίπτωση που ο χρήστης έκανε υποβάλουν το έντυπο, θα θέλαμε να γράψει την τιμή που πληκτρολογήσατε στο στη σύνοδο. Τώρα μπορούμε να ανακατευθύνει το χρήστη να hello.php. Επειδή έχουμε αποθηκευμένα είσοδο του χρήστη στο συνεδρία, hello.php θα είναι σε θέση να έχουν πρόσβαση την τιμή που έχει οριστεί στο login.php. Οπότε ας ελέγξει αυτό έξω σε ένα web browser. Κατ 'αρχάς, θα περιηγηθείτε σε http://localhost/hello.php. Μπορούμε να δούμε εδώ ότι δεν έχουν συνδεθεί ακόμα, οπότε ας κάντε κλικ στο σύνδεσμο σύνδεσης, η οποία θα μας ανακατευθύνει σε login.php. Εντάξει, θα πληκτρολογήσετε το όνομά μου, το οποίο στη συνέχεια θα αποθηκεύεται στη σύνοδο. Μεγάλη! Τώρα μπορούμε να δούμε εισόδου μου από login.php για hello.php μέσω του συνεδρία. Έτσι, τι γίνεται με την αποσύνδεση του χρήστη έξω; Λοιπόν, για να συνδέσει τον χρήστη στο, εμείς απλώς αποθηκεύονται σε μια τιμή όνομα περιόδου. Έτσι για να καταγράψει το χρήστη έξω, εμείς απλά πρέπει να αφαιρέσετε το κλειδί το όνομα από τη συστοιχία συνεδρία. Έτσι, ας ρίξουμε μια ματιά σε αυτό το τελευταίο αρχείο, logout.php. Για άλλη μια φορά, θα πρέπει να καλέσετε session_start () για να μπορέσουμε να κάνουμε τίποτα συνεδρία που αφορούν. Τώρα μπορούμε απλά να καλέσετε session_destroy (), η οποία θα φροντίσει για να απαλλαγούμε από όλα τα δεδομένα στην περίοδο και στη συνέχεια να ανακατευθύνει το χρήστη πίσω στο hello.php. Έτσι, αν κάνω κλικ στο σύνδεσμο Αποσύνδεση, μπορούμε να δούμε ότι ο διακομιστής έχει ξεχάσει ποιος είμαι, και είμαι πλέον εισέλθει Λοιπόν, τι συμβαίνει εδώ κάτω από την κουκούλα; Για να πάρετε τη συμπεριφορά που μόλις είδαμε, server μας θα πρέπει να κάνετε 2 πράγματα. Πρώτον, ο διακομιστής πρέπει με κάποιο τρόπο να αποθηκεύουν τα δεδομένα στη σύνοδο. Τα διαφορετικά αρχεία PHP που περιλαμβάνει μια ιστοσελίδα εκτελούνται ως ξεχωριστά επικλήσεις του διερμηνέα PHP τόσο την τοπική μεταβλητή δεν μπορεί να μοιραστεί μεταξύ τους. Αντ 'αυτού, ο διακομιστής πρέπει να αποθηκεύουν δεδομένα της συνεδρίας μας σε κάποιο μέρος που πολλαπλά αρχεία. php μπορεί να έχει πρόσβαση. Δεύτερον, ο διακομιστής πρέπει να συνδέσει τα δεδομένα συνεδρία με μόνο περιήγησης μου. Όταν συνδεθείτε στο Facebook, πιθανώς να υπάρχουν εκατομμύρια άλλα άτομα, επίσης συνδεδεμένοι στο Facebook την ίδια στιγμή. Αλλά ο διακομιστής χρειάζεται κάποιο τρόπο σύνδεσης των στοιχείων μου με την τρέχουσα συνεδρία μου και τα δεδομένα σε κάποιον άλλο με μια άλλη συνεδρίαση. Ευτυχώς, οι συντάκτες της PHP σκεφτεί όλα αυτά για μας, γι 'αυτό δεν χρειάζεται να εφαρμόσει οποιαδήποτε από μόνοι μας. Αλλά ας ρίξουμε μια ματιά στο τι είναι η PHP κάνει από προεπιλογή. Όταν επισκέπτομαι μια σελίδα PHP που περιέχουν session_start για πρώτη φορά, PHP θα δημιουργήσει μια μεγάλη τυχαία τιμή. Μέχρι session_destroy λέγεται ή δεν επισκέπτονται τις σελίδες PHP σε αυτό το site για λίγο- ότι οι τυχαίες και μάλλον μοναδική αξία θα σχετίζεται με μένα. Με αυτόν τον τρόπο ο διακομιστής έχει κάποιον τρόπο εντοπισμού περιήγησης μου σε αντίθεση με κάποιον άλλο. Μπορούμε να ρίξουμε μια ματιά στο σημερινό αναγνωριστικό περιόδου χρησιμοποιώντας τη λειτουργία PHP, Session_ID. Εδώ είμαστε απλά εξάγει την τιμή του αναγνωριστικού συνεδρία μας. Έτσι, αν και πάλι να συνδεθείτε με το παράδειγμα web app, και τώρα να πλοηγηθείτε σε sessid.php, θα δούμε αυτή τη μακρά σειρά των χαρακτήρων, και αυτό είναι το τρέχον αναγνωριστικό για συνεδρία μου, και αυτό είναι το πώς ο server είναι η παρακολούθηση του ποιος είμαι. Εντάξει, αλλά λύσαμε μόνο το μισό πρόβλημα. Σίγουρα, ο διακομιστής έχει πλέον κάποιον τρόπο εντοπισμού μου, αλλά όταν επισκέπτεστε μια άλλη σελίδα, ο διακομιστής πρέπει να χρησιμοποιήσετε ξανά το ίδιο αναγνωριστικό αντί να δημιουργήσουν ένα νέο. Να θυμάστε, αν δηλώνω μια τοπική μεταβλητή στην foo.php και στη συνέχεια να επισκεφθείτε bar.php, bar.php δεν έχει καμία δυνατότητα να γνωρίζει τι συνέβη στο foo.php. Επομένως, η εφαρμογή συνεδρία default php απαιτεί ότι ο browser θυμίζουν το διακομιστή που συνεδρία ID να χρησιμοποιήσετε. Αυτό υλοποιείται με τη μορφή ενός cookie. Ένα cookie-πέραν του ότι είναι ένα νόστιμο σνακ είναι απλά ένα μικρό αρχείο κειμένου στον υπολογιστή σας ότι ένας διακομιστής μπορεί να γράψει μέσω του web browser. Έτσι, μετά την PHP δημιουργεί μοναδικό αναγνωριστικό συνόδου μου μέσω session_start, πρόκειται να πει το web browser για να αποθηκεύσετε αυτό το αναγνωριστικό σε ένα τοπικό αρχείο κειμένου, ή ένα μπισκότο. Στη συνέχεια, ο web browser θα περιλαμβάνει αυτό το αναγνωριστικό σε κάθε αίτημα ότι κάνει στο διακομιστή. Έτσι, πραγματικά, ο web server δεν θυμάται ποιος είμαι. Αντ 'αυτού, ο web browser είναι απλώς να θυμηθούμε το μοναδικό αναγνωριστικό που δημιουργήθηκε με PHP και, στη συνέχεια, υπενθυμίζοντας συνεχώς το διακομιστή τι είναι αναγνωριστικό. Με αυτόν τον τρόπο, πληροφορίες όπως το όνομα χρήστη μου είναι αποθηκευμένα στο διακομιστή δεν περιηγητή μου. Το πρόγραμμα περιήγησης απλά ενημερώνει το διακομιστή όπου αποθηκεύονται PHP αυτές τις πληροφορίες έτσι PHP μπορεί να το ανακτήσει. Έτσι ανακύπτει το ερώτημα, πού είναι στην πραγματικότητα PHP αποθηκεύει αυτές τις πληροφορίες; Από προεπιλογή, η PHP θα αποθηκεύσει τα δεδομένα της συνεδρίας σας σε ένα αρχείο μέσα στο / tmp, ή στο φάκελο "temp". Το όνομα αυτού του αρχείου θα περιλαμβάνει το ID της συνεδρίας, ώστε PHP μπορεί να προσδιορίσει που το αρχείο για να διαβάσει και να γράψει από μόνο μέσω του ID της συνεδρίας. Εντάξει. Οπότε ας ανοίξει την καρτέλα Network στο πρόγραμμα εντοπισμού σφαλμάτων του Chrome μέσω εικονίδιο με το κλειδί στο πάνω δεξιά. Τώρα ας το κεφάλι για να hello.php πάλι. Ας κάνουμε κλικ στην αίτηση HTTP hello.php και στη συνέχεια κάντε κλικ στο κεφαλίδες. Εδώ μπορούμε να δούμε ότι η κεφαλίδα μπισκότο περιέχει ένα κλειδί που ονομάζεται PHPSESSID, ή PHP συνεδρία ID-με μια τιμή που είναι η ίδια μακρά σειρά είδαμε όταν επισκεφτήκαμε sessid.php. Αυτό είναι ακριβώς το πώς ο browser θυμίζει τον server τι συνεδρία ID θα πρέπει να χρησιμοποιείται. Είναι ότι ακόμη και σε μια κεφαλίδα HTTP. Εντάξει. Ας πάμε πίσω στο τερματικό. Ας πλοηγηθείτε στο / tmp, όπου PHP αποθηκεύει τις πληροφορίες της περιόδου από προεπιλογή. Σίγουρα αρκετά, μέσα από αυτό το προσωρινό φάκελο, εδώ είναι ένα αρχείο που περιέχει ακριβώς το ίδιο αναγνωριστικό περιόδου. Αν ανοίξουμε το αρχείο αυτό, μπορούμε να δούμε πώς PHP εκπροσωπεί συνεδρία μου στο δίσκο. Εδώ το string "Tommy" που αποθηκεύονται για το κλειδί το όνομα, ' το οποίο είναι ακριβώς αυτό που περιμέναμε. Και αυτό είναι μια επισκόπηση των συνόδων σε PHP. Αυτό που μόλις είδαμε ήταν μόνο η προεπιλεγμένη εφαρμογή των συνεδριών. Στην πραγματικότητα, πολλές ιστοσελίδες αλλάξετε αυτή την προεπιλεγμένη συμπεριφορά για την αποθήκευση PHP συνεδρίες πιο αποτελεσματικά προς το συμφέρον της βελτίωσης των επιδόσεων. Το όνομά μου είναι ο Tommy, και αυτό είναι CS50. [CS50.TV]