PHP Session & PHP Cookies με Παράδειγμα
Τι είναι το Cookie;
Ένα cookie είναι ένα μικρό αρχείο με μέγιστο μέγεθος 4KB που αποθηκεύει ο διακομιστής web στον υπολογιστή-πελάτη.
Μόλις οριστεί ένα cookie, όλα τα αιτήματα σελίδας που ακολουθούν επιστρέφουν το όνομα και την τιμή του cookie.
Ένα cookie μπορεί να διαβαστεί μόνο από τον τομέα από τον οποίο έχει εκδοθεί. Για παράδειγμα, ένα σύνολο cookie που χρησιμοποιεί τον τομέα www.guru99.com δεν μπορεί να διαβαστεί από τον τομέα καριέρα.guru99.com.
Οι περισσότεροι ιστότοποι στο διαδίκτυο εμφανίζουν στοιχεία από άλλους τομείς, όπως η διαφήμιση. Οι τομείς που εξυπηρετούν αυτά τα στοιχεία μπορούν επίσης να ορίσουν τα δικά τους cookie. Αυτά είναι γνωστά ως cookies τρίτων.
Ένα cookie που δημιουργήθηκε από έναν χρήστη μπορεί να είναι ορατό μόνο σε αυτόν. Οι άλλοι χρήστες δεν μπορούν να δουν την αξία του.
Τα περισσότερα προγράμματα περιήγησης ιστού έχουν επιλογές για την απενεργοποίηση των cookies, των cookies τρίτων ή και των δύο.
Εάν συμβαίνει αυτό, τότε η PHP αποκρίνεται περνώντας το διακριτικό cookie στη διεύθυνση URL.
Το διάγραμμα που φαίνεται παρακάτω δείχνει πώς λειτουργούν τα cookies.
Εδώ,
1) Ένας χρήστης ζητά μια σελίδα που αποθηκεύει cookies
2) Ο διακομιστής ορίζει το cookie στον υπολογιστή του χρήστη
3) Άλλα αιτήματα σελίδας από τον χρήστη θα επιστρέψουν το όνομα και την τιμή του cookie
Γιατί και πότε να χρησιμοποιώ Cookies;
- Το Http είναι ένα πρωτόκολλο χωρίς πολιτεία. Τα cookies μας επιτρέπουν να παρακολουθούμε την κατάσταση της εφαρμογής χρησιμοποιώντας μικρά αρχεία που είναι αποθηκευμένα στον υπολογιστή του χρήστη. Η διαδρομή στην οποία αποθηκεύονται τα cookies εξαρτάται από το πρόγραμμα περιήγησης. Το Internet Explorer συνήθως τα αποθηκεύει στο φάκελο Temporal Internet Files.
- Εξατομίκευση της εμπειρίας χρήστη – αυτό επιτυγχάνεται επιτρέποντας στους χρήστες να επιλέξουν τις προτιμήσεις τους. Η σελίδα που ζητείται να ακολουθήσει είναι εξατομικευμένη με βάση τις καθορισμένες προτιμήσεις στα cookies.
- Παρακολούθηση των σελίδων που επισκέπτεται ένας χρήστης
Δημιουργία Cookies
Ας δούμε τώρα τη βασική σύνταξη που χρησιμοποιείται για τη δημιουργία ενός cookie.
<?php setcookie(cookie_name, cookie_value, [expiry_time], [cookie_path], [domain], [secure], [httponly]); ?>
ΕΔΩ,
- Το Php "setcookie" είναι το Λειτουργία PHP χρησιμοποιείται για τη δημιουργία του cookie.
- "Cookie_name" είναι το όνομα του cookie που θα χρησιμοποιήσει ο διακομιστής κατά την ανάκτηση της τιμής του από τη μεταβλητή του πίνακα _COOKIE $. Είναι υποχρεωτικό.
- Το "cookie_value" είναι η τιμή του cookie και είναι υποχρεωτική
- Το "[expiry_time]" είναι προαιρετικό. μπορεί να χρησιμοποιηθεί για να ορίσετε το χρόνο λήξης για το cookie όπως 1 ώρα. Η ώρα ρυθμίζεται χρησιμοποιώντας τις συναρτήσεις PHP time() συν ή πλην έναν αριθμό δευτερολέπτων μεγαλύτερο από 0, δηλαδή time() + 3600 για 1 ώρα.
- Το "[cookie_path]" είναι προαιρετικό. μπορεί να χρησιμοποιηθεί για να ορίσετε τη διαδρομή cookie στο διακομιστή. Η κάθετο προς τα εμπρός "/" σημαίνει ότι το cookie θα είναι διαθέσιμο σε ολόκληρο τον τομέα. Οι υποκατάλογοι περιορίζουν την πρόσβαση των cookie στον υποτομέα.
- Το "[domain]" είναι προαιρετικό, μπορεί να χρησιμοποιηθεί για τον καθορισμό της ιεραρχίας πρόσβασης των cookie π.χ.
www.cookiedomain.com
σημαίνει ολόκληρο το domain ενώwww.sub.cookiedomain.com
περιορίζει την πρόσβαση στα cookiewww.sub.cookiedomain.com
και τους υποτομείς του. Σημειώστε ότι είναι δυνατό να έχετε έναν υποτομέα ενός υποτομέα, εφόσον οι συνολικοί χαρακτήρες δεν υπερβαίνουν τους 253 χαρακτήρες. - Το "[secure]" είναι προαιρετικό, η προεπιλογή είναι false. Χρησιμοποιείται για να προσδιορίσει εάν το cookie αποστέλλεται μέσω https εάν έχει οριστεί σε true ή http εάν έχει οριστεί σε false.
- Το "[Httponly]" είναι προαιρετικό. Εάν έχει οριστεί σε true, τότε μόνο οι γλώσσες δέσμης ενεργειών από την πλευρά του πελάτη, π.χ JavaΓραφή δεν μπορεί να έχει πρόσβαση σε αυτά.
Σημείωση: η συνάρτηση cookie php set πρέπει να εκτελεστεί πριν από την ετικέτα ανοίγματος HTML.
Ας δούμε τώρα ένα παράδειγμα που χρησιμοποιεί cookies.
Θα δημιουργήσουμε ένα βασικό πρόγραμμα που μας επιτρέπει να αποθηκεύουμε το όνομα χρήστη σε ένα cookie που λήγει μετά από δέκα δευτερόλεπτα.
Ο παρακάτω κώδικας δείχνει την υλοποίηση του παραπάνω παραδείγματος «cookies.php».
<?php setcookie("user_name", "Guru99", time()+ 60,'/'); // expires after 60 seconds echo 'the cookie has been set for 60 seconds'; ?>
Παραγωγή:
the cookie has been set for 60 seconds
Ανάκτηση της τιμής του cookie
Δημιουργήστε ένα άλλο αρχείο με το όνομα “cookies_read.php” με τον παρακάτω κώδικα.
<?php print_r($_COOKIE); //output the contents of the cookie array variable ?>
Παραγωγή:
Array ( [PHPSESSID] => h5onbf7pctbr0t68adugdp2611 [user_name] => Guru99 )
Σημείωση: Το $_COOKIE είναι μια PHP ενσωματωμένη σε εξαιρετικά καθολική μεταβλητή.
Περιέχει τα ονόματα και τις τιμές όλων των σετ cookies.
Ο αριθμός των τιμών που το
Ο πίνακας $_COOKIE που μπορεί να περιέχει εξαρτάται από το μέγεθος της μνήμης που έχει οριστεί στο php.ini.
Η προεπιλεγμένη τιμή είναι 1 GB.
Δοκιμή της εφαρμογής μας.
Ας υποθέσουμε ότι έχετε αποθηκεύσει τα αρχεία PHP στον φάκελο phptus.
- Βήμα 1 – ανοίξτε το πρόγραμμα περιήγησής σας και εισαγάγετε τη διεύθυνση URL http://localhost/phptuts/cookies_read.php
Σημείωση: Έχει εμφανιστεί μόνο ένας κενός πίνακας
- Βήμα 2 – Πρόγραμμα περιήγησης στη διεύθυνση URL http://localhost/phptuts/cookies.php
- Βήμα 3 – Επιστρέψτε στην πρώτη καρτέλα και μετά κάντε κλικ στο κουμπί ανανέωσης
Περιμένετε ένα λεπτό και μετά κάντε ξανά κλικ στο κουμπί ανανέωσης. Τι αποτελέσματα πήρατε;
Διαγραφή cookies
- Εάν θέλετε να καταστρέψετε ένα cookie πριν από την ώρα λήξης του, τότε ορίζετε τον χρόνο λήξης σε χρόνο που έχει ήδη παρέλθει.
- Δημιουργήστε ένα νέο αρχείο με το όνομα cookie_destroy.php με τον ακόλουθο κώδικα
<?php setcookie("user_name", "Guru99", time() - 360,'/'); ?>
- Επαναλάβετε τα βήματα 1 έως 3 από την παραπάνω ενότητα για την ανάκτηση τιμών cookie.
- Ανοίξτε τη διεύθυνση URL http://localhost/phptuts/cookie_destroy.php
- Μετάβαση στη διεύθυνση URL http://localhost/phptuts/cookies_read.php τι αποτελέσματα εμφανίζει;
Τι είναι μια Συνεδρία;
- Μια συνεδρία είναι μια καθολική μεταβλητή που είναι αποθηκευμένη στον διακομιστή.
- Σε κάθε συνεδρία εκχωρείται ένα μοναδικό αναγνωριστικό που χρησιμοποιείται για την ανάκτηση αποθηκευμένων τιμών.
- Κάθε φορά που δημιουργείται μια περίοδος λειτουργίας, ένα cookie που περιέχει το μοναδικό αναγνωριστικό περιόδου λειτουργίας αποθηκεύεται στον υπολογιστή του χρήστη και επιστρέφεται με κάθε αίτημα στον διακομιστή. Εάν το πρόγραμμα περιήγησης πελάτη δεν υποστηρίζει cookies, το μοναδικό αναγνωριστικό περιόδου λειτουργίας php εμφανίζεται στη διεύθυνση URL
- Οι περίοδοι λειτουργίας έχουν τη δυνατότητα να αποθηκεύουν σχετικά μεγάλα δεδομένα σε σύγκριση με τα cookies.
- Οι τιμές της περιόδου λειτουργίας διαγράφονται αυτόματα όταν το πρόγραμμα περιήγησης είναι κλειστό. Εάν θέλετε να αποθηκεύσετε τις τιμές μόνιμα, τότε θα πρέπει να τις αποθηκεύσετε στη βάση δεδομένων.
- Ακριβώς όπως η μεταβλητή του πίνακα $_COOKIE, οι μεταβλητές περιόδου λειτουργίας αποθηκεύονται στη μεταβλητή του πίνακα $_SESSION. Ακριβώς όπως τα cookies, η συνεδρία πρέπει να ξεκινήσει πριν από τυχόν ετικέτες HTML.
Γιατί και πότε να χρησιμοποιήσετε το Sessions;
- Θέλετε να αποθηκεύσετε σημαντικές πληροφορίες, όπως το αναγνωριστικό χρήστη με μεγαλύτερη ασφάλεια στο διακομιστή όπου οι κακόβουλοι χρήστες δεν μπορούν να τις μετριάσουν.
- Θέλετε να μεταβιβάσετε τιμές από τη μια σελίδα στην άλλη.
- Θέλετε την εναλλακτική των cookies σε προγράμματα περιήγησης που δεν υποστηρίζουν cookies.
- Θέλετε να αποθηκεύσετε καθολικές μεταβλητές με αποτελεσματικό και ασφαλέστερο τρόπο σε σύγκριση με τη διαβίβασή τους στη διεύθυνση URL
- Αναπτύσσετε μια εφαρμογή όπως ένα καλάθι αγορών που πρέπει να αποθηκεύει προσωρινά πληροφορίες με χωρητικότητα μεγαλύτερη από 4KB.
Δημιουργία Συνεδρίας
Για να δημιουργήσετε μια περίοδο λειτουργίας, πρέπει πρώτα να καλέσετε τη συνάρτηση session_start PHP και στη συνέχεια να αποθηκεύσετε τις τιμές σας στη μεταβλητή του πίνακα $_SESSION.
Ας υποθέσουμε ότι θέλουμε να γνωρίζουμε πόσες φορές έχει φορτωθεί μια σελίδα, μπορούμε να χρησιμοποιήσουμε μια περίοδο λειτουργίας για να το κάνουμε αυτό.
Ο παρακάτω κώδικας δείχνει πώς μπορείτε να δημιουργήσετε και να ανακτήσετε τιμές από περιόδους σύνδεσης
<?php session_start(); //start the PHP_session function if(isset($_SESSION['page_count'])) { $_SESSION['page_count'] += 1; } else { $_SESSION['page_count'] = 1; } echo 'You are visitor number ' . $_SESSION['page_count']; ?>
Παραγωγή:
You are visitor number 1
Καταστροφή μεταβλητών συνεδρίας
Η συνάρτηση session_destroy() χρησιμοποιείται για να καταστρέψει ολόκληρες τις μεταβλητές περιόδου λειτουργίας Php.
Εάν θέλετε να καταστρέψετε μόνο ένα μεμονωμένο στοιχείο συνεδρίας, χρησιμοποιείτε τη συνάρτηση unset().
Ο παρακάτω κώδικας δείχνει πώς να χρησιμοποιήσετε και τις δύο μεθόδους.
<?php session_destroy(); //destroy entire session ?>
<?php unset($_SESSION['product']); //destroy product session item ?>
Το Session_destroy καταργεί όλα τα δεδομένα της περιόδου σύνδεσης, συμπεριλαμβανομένων των cookie που σχετίζονται με τη συνεδρία.
Το Unset απελευθερώνει μόνο τις μεμονωμένες μεταβλητές περιόδου λειτουργίας.
Άλλα δεδομένα παραμένουν άθικτα.
Περίληψη
- Τα cookies είναι μικρά αρχεία που αποθηκεύονται στον υπολογιστή του χρήστη
- Τα cookies μπορούν να διαβαστούν μόνο από τον τομέα έκδοσης
- Τα cookie μπορεί να έχουν χρόνο λήξης, εάν δεν έχει οριστεί, τότε το cookie λήγει όταν το πρόγραμμα περιήγησης είναι κλειστό
- Οι περίοδοι λειτουργίας είναι σαν καθολικές μεταβλητές που είναι αποθηκευμένες στον διακομιστή
- Σε κάθε συνεδρία δίνεται ένα μοναδικό αναγνωριστικό αναγνώρισης που χρησιμοποιείται για την παρακολούθηση των μεταβλητών για έναν χρήστη.
- Τόσο τα cookie όσο και οι περίοδοι λειτουργίας πρέπει να ξεκινήσουν πριν αποσταλούν τυχόν ετικέτες HTML στο πρόγραμμα περιήγησης.