Εάν πρέπει να καταστήσετε μια από τις ενότητες του ιστότοπού σας διαθέσιμη σε έναν περιορισμένο αλλά αόριστο κύκλο ατόμων, ο ευκολότερος τρόπος για να το κάνετε αυτό είναι να εγγραφείτε και να εξουσιοδοτήσετε χρήστες. Υπάρχουν πολλοί τρόποι εξουσιοδότησης των χρηστών. Μπορείτε να χρησιμοποιήσετε τόσο εργαλεία διακομιστή ιστού όσο και εργαλεία γλώσσας προγραμματισμού. Θα μιλήσουμε για την περίπτωση που χρησιμοποιούνται συνεδρίες PHP.

Ίσως θα θέλατε να δείτε περισσότερα σύγχρονο τρόποδημιουργώντας μια τέτοια μορφή. Έχω ακόμα σχέδια για την πλήρη μοντέρνα και ενημερωμένη παρουσίασή του, αλλά μπορείτε να δείτε ότι η φόρμα ανατροφοδότησημπορεί να κατασκευαστεί χρησιμοποιώντας αντικειμενοστραφή κόλπα στην PHP.

Αρχικά, ας συζητήσουμε όλα τα βήματα που θα κάνουμε στη συνέχεια. Τι χρειαζόμαστε πραγματικά; Χρειαζόμαστε ένα σενάριο που θα εγγράφει τον χρήστη, θα εξουσιοδοτεί τον χρήστη, θα ανακατευθύνει τον χρήστη κάπου μετά την εξουσιοδότηση. Θα χρειαστεί επίσης να δημιουργήσουμε μια σελίδα που θα προστατεύεται από την πρόσβαση από μη εξουσιοδοτημένους χρήστες. Για εγγραφή και εξουσιοδότηση, θα χρειαστεί να δημιουργήσουμε Φόρμες HTML. Θα αποθηκεύσουμε πληροφορίες σχετικά με εγγεγραμμένους χρήστες σε μια βάση δεδομένων. Αυτό σημαίνει ότι χρειαζόμαστε ακόμα ένα σενάριο σύνδεσης DBMS. Όλη η εργασία που θα εκτελέσουμε είναι λειτουργίες που γράφουμε μόνοι μας. Θα αποθηκεύσουμε αυτές τις λειτουργίες σε ξεχωριστό αρχείο.

Χρειαζόμαστε λοιπόν τα παρακάτω αρχεία:

  • σύνδεση με το DBMS·
  • προσαρμοσμένες λειτουργίες?
  • εξουσιοδότηση;
  • εγγραφή;
  • ασφαλής σελίδα?
  • σενάριο τερματισμού λειτουργίας χρήστη.
  • ένα σενάριο που ελέγχει την κατάσταση εξουσιοδότησης του χρήστη.
  • φύλλο στυλ για τον πιο απλό σχεδιασμό των σελίδων μας.

Όλα αυτά δεν θα έχουν νόημα εάν δεν έχετε αντίστοιχο πίνακα στη βάση δεδομένων. Εκκινήστε το εργαλείο διαχείρισης DBMS (PhpMyAdmin ή γραμμή εντολών, όποιο είναι πιο βολικό) και εκτελέστε το ακόλουθο ερώτημα σε αυτό:

CREATE TABLE `users` (`id` int(11) NOT NULL AUTO_INCREMENT, `login` char(16) NOT NULL, `password` char(40) NOT NULL, `reg_date` timestamp NOT NULL DEFAULT CURRENT_TIMEYSTAMP, PRI id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Θα ονομάσω τα αρχεία σεναρίου μας ως εξής (θα βρίσκονται όλα στον ίδιο κατάλογο):

  • βάση δεδομένων.php
  • λειτουργίες.php
  • login.php
  • register.php;
  • index.php;
  • logout.php;
  • checkAuth.php;
  • στυλ.css

Ο σκοπός καθενός από αυτούς, είμαι σίγουρος ότι καταλαβαίνετε. Ας ξεκινήσουμε με το σενάριο σύνδεσης DBMS. Τον έχετε ήδη δει. Απλώς αποθηκεύστε αυτόν τον κώδικα σεναρίου σε ένα αρχείο που ονομάζεται database.php. Θα δηλώσουμε προσαρμοσμένες συναρτήσεις στο αρχείο functions.php. Πώς θα λειτουργήσουν όλα; Ένας μη εξουσιοδοτημένος χρήστης προσπαθεί να αποκτήσει πρόσβαση σε ένα προστατευμένο έγγραφο index.php, το σύστημα ελέγχει εάν ο χρήστης είναι εξουσιοδοτημένος, εάν ο χρήστης δεν είναι εξουσιοδοτημένος, ανακατευθύνεται στη σελίδα εξουσιοδότησης. Στη σελίδα εξουσιοδότησης, ο χρήστης θα πρέπει να δει μια φόρμα εξουσιοδότησης. Ας τα καταφέρουμε.

Εξουσιοδότηση χρήστη

κανω ΕΓΓΡΑΦΗ.

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

/* αρχείο style.css */ .row ( margin-bottom:10px; width:220px; ) .row label ( display:block; font-weight:bold; ) .row input.text ( font-size:1.2em; padding:2px 5px; ) .to_reg ( font-size:0,9em; ) .instruction ( font-size:0,8em; color:#aaaaaa; margin-left:2px; cursor:default; ) .error ( color:red; margin-αριστερά: 3px;)

Εάν όλα γίνονται σωστά, θα πρέπει να έχετε τα εξής στο πρόγραμμα περιήγησής σας:

Φυσικά, δεν έχουμε ακόμη έναν εγγεγραμμένο χρήστη και για να συνδεθείτε πρέπει να εγγραφείτε. Ας φτιάξουμε μια φόρμα εγγραφής.

Εγγραφή χρήστη

" />

Ίσως έχετε παρατηρήσει ότι στον κώδικα HTML υπάρχουν μεταβλητές PHP. Είναι το περιεχόμενο των χαρακτηριστικών του πεδίου κειμένου φόρμας, το περιεχόμενο των δοχείων σφαλμάτων. Αλλά δεν έχουμε αρχικοποιήσει αυτές τις μεταβλητές. Ας το κάνουμε.

Εγγραφή χρήστη

" />
Το όνομα χρήστη μπορεί να περιέχει μόνο λατινικούς χαρακτήρες, αριθμούς, σύμβολα "_", "-", ".". Το μήκος του ονόματος χρήστη πρέπει να είναι τουλάχιστον 4 χαρακτήρες και όχι περισσότερο από 16 χαρακτήρες
Στον κωδικό πρόσβασης, μπορείτε να χρησιμοποιήσετε μόνο λατινικούς χαρακτήρες, αριθμούς, σύμβολα "_", "!", "(", ")". Ο κωδικός πρόσβασης πρέπει να αποτελείται από τουλάχιστον 6 χαρακτήρες και όχι περισσότερο από 16 χαρακτήρες
Επαναλάβετε τον κωδικό πρόσβασης που εισαγάγατε προηγουμένως

Το χαρακτηριστικό action της ετικέτας φόρμας δεν έχει καθορισμένη παράμετρο. Σε αυτήν την περίπτωση, όταν υποβληθούν τα δεδομένα της φόρμας, θα υποβληθούν σε επεξεργασία με το ίδιο σενάριο από το οποίο στάλθηκαν. Πρέπει λοιπόν να γράψουμε τον κώδικα που επεξεργάζεται τα δεδομένα της φόρμας. Αλλά ας συζητήσουμε πρώτα τον αλγόριθμο για την επεξεργασία τους.

Χρειαζόμαστε τα πεδία σύνδεσης και κωδικού πρόσβασης να μην είναι κενά. Στη συνέχεια, πρέπει να ελέγξετε τη σύνδεση για συμμόρφωση με τις απαιτήσεις. Ο κωδικός πρόσβασης πρέπει επίσης να πληροί τις περιγραφόμενες απαιτήσεις και ο επαναπροσδιορισμένος κωδικός πρέπει να ταιριάζει με αυτόν και, επιπλέον, να είναι πανομοιότυποι. Εάν κάποια από αυτές τις προϋποθέσεις δεν πληρούται, η επεξεργασία των δεδομένων της φόρμας θα πρέπει να τερματιστεί, θα πρέπει να εγγραφεί μια κατάλληλη ειδοποίηση στη σειρά των μηνυμάτων σφάλματος και θα πρέπει να εμφανίζεται στον χρήστη. Για τη διευκόλυνση του χρήστη, θα αποθηκεύσουμε το login που έχει εισάγει (αν το έχει καθορίσει), γράφοντας την τιμή του στον πίνακα $fields.

Εάν όλα είναι καλά, στο παράθυρο του προγράμματος περιήγησής σας, αναφερόμενος στο έγγραφο register.php, θα πρέπει να δείτε κάτι σαν αυτό:

Τώρα, ας πούμε ότι ο χρήστης έκανε κλικ στο κουμπί εγγραφής, δεν συμπλήρωσε τα πεδία της φόρμας. Σύμφωνα με τον αλγόριθμό μας, η σύνδεση και ο κωδικός πρόσβασης δεν μπορούν να είναι κενά. Εάν δεν πληρούται αυτή η προϋπόθεση, δεν είναι δυνατή η εγγραφή. Έχουμε υπόψη μας ότι η επεξεργασία δεδομένων φόρμας πραγματοποιείται στο τρέχον σενάριο. Πρέπει λοιπόν να αλλάξουμε τον κωδικό του προσθέτοντας τους κατάλληλους ελέγχους. Ας συζητήσουμε αμέσως τους παρακάτω ελέγχους. Εάν έχουν εισαχθεί και τα δύο στοιχεία σύνδεσης και κωδικός πρόσβασης, πρέπει να ελέγξετε τη συμμόρφωσή τους με τις καθορισμένες απαιτήσεις. Για να ελέγξουμε τη σύνδεση και τον κωδικό πρόσβασης, θα δημιουργήσουμε λειτουργίες χρήστη στο αρχείο functions.php.

/** * functions.php * Αρχείο με προσαρμοσμένες συναρτήσεις */ // Συνδέστε το αρχείο με παραμέτρους σύνδεσης στο DBMS require_once("database.php"); // Έλεγχος της συνάρτησης ονόματος χρήστη checkLogin($str) ( // Εκκίνηση μιας μεταβλητής με πιθανό μήνυμα σφάλματος $error = ""; // Εάν δεν υπάρχει συμβολοσειρά σύνδεσης, επιστρέψτε ένα μήνυμα σφάλματος if(!$str) ( $error = " Δεν εισαγάγατε όνομα χρήστη"; επιστροφή $error; ) /** * Έλεγχος του ονόματος χρήστη με κανονικές εκφράσεις * Η σύνδεση δεν πρέπει να είναι μικρότερη από 4, όχι περισσότερους από 16 χαρακτήρες * Πρέπει να περιέχει λατινικούς χαρακτήρες, αριθμούς, * μπορεί να είναι χαρακτήρες "_", "-", "." */ $pattern = "/^[-_.a-z\d](4,16)$/i"; $result = preg_match($pattern, $ str) ; // Εάν ο έλεγχος αποτύχει, επιστρέψτε ένα μήνυμα σφάλματος if(!$result) ( $error = "Μη έγκυροι χαρακτήρες στο όνομα χρήστη ή το όνομα χρήστη είναι πολύ σύντομο (μακρύ)"; επιστροφή $error; ) // Αν όλα είναι εντάξει, επιστρέφει true return true; ) // Έλεγχος συνάρτησης κωδικού πρόσβασης χρήστη checkPassword($str) ( // Αρχικοποίηση μεταβλητής με πιθανό μήνυμα σφάλματος $error = ""; // Εάν λείπει συμβολοσειρά εισαγωγής με σύνδεση, επιστροφή μήνυμα σφάλματος if(!$str) ( $error = "Δεν εισαγάγατε κωδικό πρόσβασης"; επιστροφή $error; ) /** * Ελέγξτε τον κωδικό πρόσβασης του χρήστη χρησιμοποιώντας κανονικές εκφράσεις * Ο κωδικός πρόσβασης δεν πρέπει να είναι μικρότερος από 6, όχι μεγαλύτερος από 16 χαρακτήρες * Πρέπει να περιέχει λατινικούς χαρακτήρες, αριθμούς, * μπορεί να περιέχει χαρακτήρες "_", "!", " (", ")" */ $pattern = "/^[_!)(.a-z\d](6,16)$/i"; $result = preg_match($pattern, $str); // Εάν ελεγχθεί απέτυχε, επιστρέψτε το μήνυμα σφάλματος if(!$result) ( $error = "Μη έγκυροι χαρακτήρες στον κωδικό πρόσβασης χρήστη ή ο κωδικός πρόσβασης πολύ σύντομος (μακρύς)"; επιστροφή $error; ) // Εάν όλα είναι καλά, επιστρέψτε true return true; )

Τώρα πρέπει να τροποποιήσουμε το αρχείο register.php για να χρησιμοποιήσουμε τις συναρτήσεις που δηλώσαμε. Θα προσθέσουμε μια συνθήκη στο σενάριο που ελέγχει για το κουμπί εγγραφής στο οποίο γίνεται κλικ. Μέσα σε αυτήν τη συνθήκη, ξεκινά ο έλεγχος σύνδεσης και κωδικού πρόσβασης. Εάν κάποιος από τους ελέγχους αποτύχει, αποδίδουμε ξανά τη φόρμα και εμφανίζουμε ένα μήνυμα σφάλματος. Εάν δεν υπάρχουν σφάλματα, καταχωρούμε τον χρήστη, ενώ η φόρμα εγγραφής δεν εμφανίζεται πλέον, ενημερώνουμε τον χρήστη για την επιτυχή εγγραφή και χρησιμοποιούμε τη συνάρτηση header() για να τον ανακατευθύνουμε στη φόρμα εξουσιοδότησης.

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

"; header("Ανανέωση: 5; URL = login.php"); ) // Διαφορετικά, ενημερώστε τον χρήστη σχετικά με το σφάλμα else ( $errors["full_error"] = $reg; ) ) ) ?> Εγγραφή χρήστη
" />
Το όνομα χρήστη μπορεί να περιέχει μόνο λατινικούς χαρακτήρες, αριθμούς, σύμβολα "_", "-", ".". Το μήκος του ονόματος χρήστη πρέπει να είναι τουλάχιστον 4 χαρακτήρες και όχι περισσότερο από 16 χαρακτήρες
Στον κωδικό πρόσβασης, μπορείτε να χρησιμοποιήσετε μόνο λατινικούς χαρακτήρες, αριθμούς, σύμβολα "_", "!", "(", ")". Ο κωδικός πρόσβασης πρέπει να αποτελείται από τουλάχιστον 6 χαρακτήρες και όχι περισσότερο από 16 χαρακτήρες
Επαναλάβετε τον κωδικό πρόσβασης που εισαγάγατε προηγουμένως

Θα έπρεπε να έχετε παρατηρήσει μια ακόμη νέα λειτουργία στο σενάριο - register() . Δεν το έχουμε ανακοινώσει ακόμα. Ας το κάνουμε.

// Εγγραφή συνάρτησης εγγραφής χρήστη ($login, $password) ( // Εκκίνηση μεταβλητής με πιθανό μήνυμα σφάλματος $error = ""; // Εάν δεν υπάρχει συμβολοσειρά σύνδεσης, επιστρέψτε ένα μήνυμα σφάλματος if(!$login) ( $ error = "Δεν έχει καθοριστεί η σύνδεση"; επιστροφή $error; ) elseif(!$password) ( $error = "Ο κωδικός δεν έχει καθοριστεί"; επιστροφή $error; ) // Ελέγξτε εάν ο χρήστης είναι ήδη εγγεγραμμένος // Συνδεθείτε στο DBMS connect() ; // Γράψτε μια συμβολοσειρά ερωτήματος $sql = "SELECT `id` FROM `users` WHERE `login`="" . $login . """; // Κάντε ένα ερώτημα βάσης δεδομένων $query = mysql_query($ sql) ή die( ""); // Δείτε τον αριθμό των χρηστών με αυτήν τη σύνδεση, εάν υπάρχει τουλάχιστον ένας, // επιστρέψτε ένα μήνυμα σφάλματος if(mysql_num_rows($query) > 0) ( $error = "The χρήστης με τα καθορισμένα στοιχεία σύνδεσης είναι ήδη εγγεγραμμένος"; επιστροφή $ σφάλμα; ) // Εάν δεν υπάρχει τέτοιος χρήστης, καταχωρήστε τον // Γράψτε τη συμβολοσειρά ερωτήματος $sql = "INSERT INTO `users` (`id`,`login`, `password`) ΤΙΜΕΣ (NULL, "" . $login . " ","" . $password. "")"; // Κάντε ένα ερώτημα στη βάση δεδομένων $query = mysql_query($sql) ή die("

Δεν είναι δυνατή η προσθήκη χρήστη: " . mysql_error() . ". Παρουσιάστηκε σφάλμα στη γραμμή ". __LINE__."

"); // Μην ξεχάσετε να αποσυνδεθείτε από το DBMS mysql_close(); // Επιστροφή true, υποδεικνύοντας ότι η επιτυχής εγγραφή χρήστη επιστροφής true; )

Εάν όλα είναι εντάξει, ο χρήστης σας θα εγγραφεί. Μπορείτε να δοκιμάσετε τη φόρμα. Δοκιμάστε να εγγράψετε χρήστες με τα ίδια στοιχεία σύνδεσης. Μετά την επιτυχή εγγραφή, ο χρήστης θα ανακατευθυνθεί στη φόρμα εξουσιοδότησης. Προηγουμένως, απλώς δημιουργήσαμε τη σήμανση για την εμφάνιση αυτής της φόρμας. Εφόσον δεν καθορίζεται καμία παράμετρος στο χαρακτηριστικό της δράσης, τα δεδομένα που υποβάλλονται από τη φόρμα θα υποβάλλονται σε επεξεργασία στο ίδιο σενάριο. Πρέπει λοιπόν να γράψουμε τον κώδικα για επεξεργασία και να τον προσθέσουμε στο έγγραφο login.php.

Εξουσιοδότηση χρήστη

;">

Εάν δεν είστε εγγεγραμμένος στο σύστημα, εγγραφείτε.

Ίσως έχετε παρατηρήσει ότι τώρα έχουμε μια άλλη άγνωστη λειτουργία στο σενάριο εξουσιοδότησης — authorization() . Αυτή η λειτουργία θα πρέπει να εξουσιοδοτεί τον χρήστη ελέγχοντας πρώτα εάν υπάρχει εγγεγραμμένος χρήστης στη βάση δεδομένων με τον ίδιο κωδικό πρόσβασης και κωδικό πρόσβασης. Εάν δεν βρεθεί ένας τέτοιος χρήστης, η εξουσιοδότηση θα ματαιωθεί και ένα μήνυμα αποτυχίας θα εμφανιστεί στην οθόνη. Μετά την επιτυχή επαλήθευση, η συνάρτηση authorization() θα ξεκινήσει τη συνεδρία και θα γράψει σε αυτήν τις τιμές σύνδεσης και κωδικού πρόσβασης του χρήστη, θα ενημερώσει το σενάριο για την επιτυχία της εξουσιοδότησης και το σενάριο θα ανακατευθύνει τον χρήστη σε μια ασφαλή σελίδα πόρων.

/** * Λειτουργία εξουσιοδότησης χρήστη. * Η εξουσιοδότηση των χρηστών θα πραγματοποιηθεί * με χρήση συνεδριών PHP. */ εξουσιοδότηση συνάρτησης ($login, $password) ( // Εκκίνηση μεταβλητής με πιθανό μήνυμα σφάλματος $error = ""; // Εάν δεν υπάρχει συμβολοσειρά σύνδεσης, επιστρέψτε ένα μήνυμα σφάλματος if(!$login) ( $error = " Δεν έχει καθοριστεί η σύνδεση"; return $error; ) elseif(!$password) ( $error = "Ο κωδικός δεν έχει καθοριστεί"; return $error; ) // Ελέγξτε εάν ο χρήστης είναι ήδη εγγεγραμμένος // Σύνδεση στη σύνδεση DBMS( ); // Πρέπει να ελέγξουμε αν υπάρχει ένας τέτοιος χρήστης μεταξύ των εγγεγραμμένων // Σύνθεση της συμβολοσειράς ερωτήματος $sql = "SELECT `id` FROM `users` WHERE `login`="".$login."" ΚΑΙ `password`="".$password ."""; // Εκτελέστε το ερώτημα $query = mysql_query($sql) ή die("

Δεν είναι δυνατή η εκτέλεση του ερωτήματος: " . mysql_error() . ". Παρουσιάστηκε σφάλμα στη γραμμή ". __LINE__."

"); // Εάν δεν υπάρχει χρήστης με τέτοια δεδομένα, επιστρέψτε ένα μήνυμα σφάλματος if(mysql_num_rows($query) == 0) ( $error = "Ο χρήστης με τα καθορισμένα δεδομένα δεν έχει εγγραφεί"; επιστροφή $error; ) // Εάν υπάρχει ο χρήστης, ξεκινήστε τη συνεδρία session_start(); // Και γράψτε τη σύνδεση και τον κωδικό πρόσβασης του χρήστη σε αυτήν // Για να το κάνετε αυτό, χρησιμοποιούμε τον υπερσφαιρικό πίνακα $_SESSION $_SESSION["login"] = $login; $ _SESSION["password"] = $password; / / Μην ξεχάσετε να κλείσετε τη σύνδεση της βάσης δεδομένων mysql_close(); // Επιστροφή true για την αναφορά επιτυχούς εξουσιοδότησης χρήστη επιστροφή true; )

Όταν ένας χρήστης εισέρχεται σε μια ασφαλή σελίδα, θα πρέπει να ελέγξετε την ορθότητα των δεδομένων εξουσιοδότησης του. Για να γίνει αυτό, χρειαζόμαστε μια ακόμη συνάρτηση που ορίζεται από το χρήστη. Ας το ονομάσουμε checkAuth() . Καθήκον του θα είναι να επαληθεύει τα δεδομένα εξουσιοδότησης του χρήστη με αυτά που είναι αποθηκευμένα στη βάση δεδομένων μας. Εάν τα δεδομένα δεν ταιριάζουν, ο χρήστης θα ανακατευθυνθεί στη σελίδα εξουσιοδότησης.

Συνάρτηση checkAuth($login, $password) ( // Εάν δεν υπάρχει σύνδεση ή κωδικός πρόσβασης, επιστρέψτε false if(!$login || !$password) return false; // Ελέγξτε εάν αυτός ο χρήστης είναι εγγεγραμμένος // Σύνδεση στο DBMS connect(); // Συνθέστε τη συμβολοσειρά ερωτήματος $sql = "SELECT `id` FROM `users` WHERE `login`="".$login."" AND `password`="".$password."""; // Εκτελέστε το ερώτημα $ query = mysql_query($sql) ή die("

Δεν είναι δυνατή η εκτέλεση του ερωτήματος: " . mysql_error() . ". Παρουσιάστηκε σφάλμα στη γραμμή ". __LINE__."

"); // Εάν δεν υπάρχει χρήστης με τέτοια δεδομένα, επιστρέψτε false; if(mysql_num_rows($query) == 0) ( return false; ) // Μην ξεχάσετε να κλείσετε τη σύνδεση με τη βάση δεδομένων mysql_close(); // Διαφορετικά, επιστρέψτε true return true;)

Τώρα που ο χρήστης έχει προσγειωθεί σε μια ασφαλή σελίδα, πρέπει να καλέσουμε τη συνάρτηση επικύρωσης δεδομένων εξουσιοδότησης. Θα τοποθετήσουμε το σενάριο κλήσης και ελέγχου σε ένα ξεχωριστό αρχείο checkAuth.php και θα το συνδέσουμε με εκείνες τις σελίδες που θα κλείσουν για πρόσβαση στο κοινό.

/** * Σενάριο για έλεγχο εξουσιοδότησης χρήστη */ // Έναρξη της συνεδρίας, από την οποία θα εξαγάγουμε τη σύνδεση και τον κωδικό πρόσβασης // των εξουσιοδοτημένων χρηστών session_start(); // Συμπεριλάβετε ένα αρχείο με προσαρμοσμένες συναρτήσεις require_once("functions.php"); /** * Για να προσδιορίσουμε εάν ένας χρήστης είναι συνδεδεμένος, χρειαζόμαστε * για να ελέγξουμε εάν υπάρχουν εγγραφές στη βάση δεδομένων για το όνομα χρήστη * και τον κωδικό πρόσβασής του. Για να γίνει αυτό, θα χρησιμοποιήσουμε την προσαρμοσμένη λειτουργία * για να ελέγξουμε την ορθότητα των δεδομένων του εξουσιοδοτημένου χρήστη. * Εάν αυτή η συνάρτηση επιστρέψει false, τότε δεν υπάρχει εξουσιοδότηση. * Εάν δεν υπάρχει εξουσιοδότηση, απλώς ανακατευθύνουμε * τον χρήστη στη σελίδα εξουσιοδότησης. */ // Εάν η περίοδος σύνδεσης περιέχει δεδομένα σύνδεσης και κωδικού πρόσβασης, // ελέγξτε τα if(isset($_SESSION["login"]) && $_SESSION["login"] && isset($_SESSION["password" ]) && $_SESSION["password"]) ( // Εάν η επικύρωση των υπαρχόντων δεδομένων αποτύχει εάν(!checkAuth($_SESSION["login"], $_SESSION["password"])) ( // Ανακατεύθυνση του χρήστη στην κεφαλίδα της σελίδας σύνδεσης ("location: login.php"); // Τερματισμός της εκτέλεσης της εξόδου του σεναρίου; ) ) // Εάν δεν υπάρχουν δεδομένα είτε για τη σύνδεση είτε για τον κωδικό πρόσβασης του χρήστη, // θεωρούμε ότι δεν υπάρχει εξουσιοδότηση, ανακατευθύνουμε το χρήστη // στη σελίδα εξουσιοδότησης αλλού ( header("location: login.php"); // Διακοπή εξόδου εκτέλεσης σεναρίου; )

Τώρα ας δημιουργήσουμε τον κώδικα για την ασφαλή σελίδα μας. Θα είναι αρκετά απλό.

Εξουσιοδότηση και εγγραφή χρηστών

Επιτυχής εξουσιοδότηση.

Έχετε πρόσβαση σε μια ασφαλή σελίδα. Μπορείτε να αποσυνδεθείτε.

Όπως μπορείτε να δείτε, στο προστατευμένο έγγραφο περιλαμβάνουμε μόνο ένα αρχείο - checkAuth.php. Όλα τα άλλα αρχεία περιλαμβάνονται σε άλλα σενάρια. Επομένως, ο κώδικάς μας δεν φαίνεται ογκώδης. Έχουμε οργανώσει εγγραφή και εξουσιοδότηση χρηστών. Τώρα πρέπει να επιτρέψετε στους χρήστες να αποσυνδεθούν. Για να γίνει αυτό, θα δημιουργήσουμε ένα σενάριο στο αρχείο logout.php.

/** * Σενάριο αποσύνδεσης χρήστη. Εφόσον οι χρήστες είναι * εξουσιοδοτημένοι μέσω περιόδων σύνδεσης, το όνομα χρήστη και ο κωδικός πρόσβασής τους αποθηκεύονται * στον υπερσφαιρικό πίνακα $_SESSION. Για να αποσυνδεθείτε * από το σύστημα, απλώς καταστρέψτε τις τιμές * των συστοιχιών $_SESSION["login"] και $_SESSION["password"], * μετά την οποία ανακατευθύνουμε τον χρήστη στη σελίδα σύνδεσης */ // Be βεβαιωθείτε ότι θα ξεκινήσετε τη συνεδρία session_start(); unset($_SESSION["login"]); unset($_SESSION["password"]); header("location: login.php");

Το σενάριο εγγραφής, εξουσιοδότησης και επαλήθευσης των χρηστών είναι έτοιμο. Μπορείτε να το χρησιμοποιήσετε για τον εαυτό σας, να το συμπληρώσετε, να το τροποποιήσετε για να ταιριάζει στις ανάγκες σας. Εάν έχετε ερωτήσεις, μπορείτε να τις ρωτήσετε στα σχόλια. Μπορείτε να κατεβάσετε μόνοι σας όλα τα αρχεία που συζητήθηκαν εδώ, συσκευασμένα σε ένα αρχείο.

ΥΣΤΕΡΟΓΡΑΦΟ. Γνωρίζω ότι είναι καλύτερο να γράφετε αντικειμενοστραφή κώδικα, γνωρίζω ότι δεν αξίζει να διαβιβάζετε και να αποθηκεύετε τον κωδικό πρόσβασης σε καθαρό κείμενο, ότι οι πληροφορίες που εισάγονται στη βάση δεδομένων πρέπει να είναι προεπιλεγμένες. Ξέρω. Δεν θα μιλήσω για αυτό εδώ.

Ως μέρος της υπηρεσίας Personal Web Server, οι ιστότοποι που φιλοξενούνται σε έναν λογαριασμό μπορούν να εκκινηθούν όχι μόνο στον κύριο διακομιστή ιστού, αλλά και στη δική τους παρουσία του διακομιστή ιστού Apache, του οποίου οι διαδικασίες είναι πάντα έτοιμες να επεξεργαστούν αιτήματα προς τον ιστότοπο.

Εκτός από τη βελτιστοποίηση της επεξεργασίας αιτημάτων, ένας προσωπικός διακομιστής ιστού σάς επιτρέπει να χρησιμοποιείτε λογισμικό που δεν είναι διαθέσιμο σε έναν κοινό διακομιστή ιστού: επιταχυντές PHP, μια ολοκληρωμένη λύση για τη βελτίωση της απόδοσης έργων υπό τον έλεγχο του 1C-Bitrix CMS και Εργαλείο εντοπισμού σφαλμάτων σεναρίων PHP.

Η υπηρεσία είναι διαθέσιμη για χρήση σε όλα τα τρέχοντα προγράμματα χρέωσης, μπορείτε να τη συνδέσετε στην ενότητα "Διακομιστής Ιστού" του Πίνακα Ελέγχου Φιλοξενίας.

Αρχή λειτουργίας


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

Ένας προσωπικός διακομιστής ιστού απλοποιεί σημαντικά την αλληλεπίδραση ενός λογαριασμού με την κύρια διαδικασία του Apache: ένας ορισμένος αριθμός διαδικασιών προσωπικών διακομιστών ιστού εκτελούνται πάντα κάτω από το όνομα χρήστη του λογαριασμού φιλοξενίας, οι οποίοι έχουν μόνο δύο καταστάσεις: "απασχολημένος" ή "ελεύθερος".

Οι διαδικασίες ενός προσωπικού διακομιστή ιστού ασχολούνται με την επεξεργασία αιτημάτων προς τον ιστότοπο στο ποσό που καθορίζεται από το επιλεγμένο πρόγραμμα χρέωσης. Μπορείτε να δείτε πώς η διαδικασία του προσωπικού διακομιστή ιστού λαμβάνει και εκτελεί ένα αίτημα και, στη συνέχεια, απελευθερώνεται, χρησιμοποιώντας το κορυφαίο βοηθητικό πρόγραμμα στην κονσόλα κατά τη σύνδεση σε έναν λογαριασμό φιλοξενίας μέσω SSH.

Δυνατότητες

  • Εκτέλεση του διακομιστή ιστού Apache με πρόσθετες ενότητες που δεν είναι διαθέσιμες σε κανονικούς κοινόχρηστους λογαριασμούς φιλοξενίας.
  • Επανεκκίνηση του Personal Web Server από τον Πίνακα Ελέγχου.
  • Χρήση επιταχυντών PHP που επιταχύνουν σημαντικά την εργασία διαφόρων CMS: Zend OPCache, APC , xCache και eAccelerator .
  • Διαχείριση επέκτασης PHP: Zend Optimizer, ionCube Loader, xDebug.
  • Βελτιστοποίηση έργων υπό τον έλεγχο του CMS 1C-Bitrix με τη δημιουργία ενός περιβάλλοντος PHP που πληροί τις απαιτήσεις του CMS.
  • Καλύτερη απόδοση από έναν γενικό διακομιστή ιστού, καθώς οι διαδικασίες αιτημάτων εκτελούνται συνεχώς.

Συνιστούμε τη χρήση της υπηρεσίας "Personal Web Server" όταν φιλοξενείτε σοβαρά έργα με μεσαία και υψηλή επισκεψιμότητα ή έργα που απαιτούν μη τυπικές ρυθμίσεις περιβάλλοντος και προηγμένες δυνατότητες διαχείρισης ιστότοπου.

Έλεγχος έκδοσης διακομιστή web

PHP

PHP (Προεπεξεργαστής Υπερκειμένου)- η πιο διάσημη και διαδεδομένη γλώσσα ανάπτυξης διαδικτυακών εφαρμογών. Η έκδοση PHP ρυθμίζεται μέσω της διαχείρισης προσωπικού διακομιστή ιστού (από 5.2 έως 7.1 περιλαμβάνονται για επιλογή). Η προτεινόμενη έκδοση PHP που πληροί τις απαιτήσεις των περισσότερων CMS και επεκτάσεων είναι η PHP 5.6. Η λίστα με τις τρέχουσες εκδόσεις ενημερώνεται έγκαιρα.

uWSGI (Python)

WSGI (Διασύνδεση πύλης διακομιστή ιστού)είναι ένα δημοφιλές πρότυπο για τη διασύνδεση μεταξύ ενός προγράμματος Python που εκτελείται από την πλευρά του διακομιστή και του ίδιου του διακομιστή ιστού Apache. Απαιτείται για έργα γραμμένα σε Python.

Node.js

Node.js- μια πλατφόρμα λογισμικού για την εκτέλεση κώδικα JavaScript. Το Node.js επιτρέπει στο JavaScript να αλληλεπιδρά με συσκευές μέσω του API του, να συνδέει εξωτερικές βιβλιοθήκες σε διαφορετικές γλώσσες και να παρέχει κλήσεις σε αυτές από κώδικα JavaScript.

Χρήση επιταχυντών PHP

Οι επιταχυντές PHP είναι επεκτάσεις που αποθηκεύουν μεταγλωττισμένο κώδικα σεναρίου PHP στη μνήμη για γρήγορη εκτέλεση την επόμενη φορά που θα κληθεί. Σας επιτρέπουν να επιταχύνετε σημαντικά την εκτέλεση σεναρίων PHP και να μειώσετε τους πόρους του διακομιστή web που απαιτούνται για αυτό (σύμφωνα με ορισμένες εκτιμήσεις - κατά 5-20 φορές).

Με τον κανονικό τρόπο που λειτουργεί η PHP, κάθε σενάριο πρέπει να μεταγλωττιστεί σε κώδικα μηχανής πριν από την εκτέλεση και μόνο μετά να εκτελεστεί. Η μεταγλώττιση πραγματοποιείται κάθε φορά που γίνεται πρόσβαση στο σενάριο, δηλαδή κάθε φορά που εμφανίζεται η σελίδα, η μεταγλώττιση του σεναρίου ξεκινά ξανά. Χρειάζεται χρόνος και πόροι CPU για τη μεταγλώττιση του σεναρίου. Οι επιταχυντές PHP αποθηκεύουν τη μεταγλωττισμένη έκδοση του σεναρίου στη μνήμη RAM. Έτσι, σε επόμενες κλήσεις στο σενάριο, δεν απαιτείται μεταγλώττιση και η PHP ξεκινά αμέσως την εκτέλεση του κώδικα μηχανής. Η προσωρινή αποθήκευση εξοικονομεί πόρους της CPU και μειώνει τον χρόνο που απαιτείται για την απόδοση μιας σελίδας.

Εκτός από την κύρια λειτουργία - προσωρινή αποθήκευση σεναρίων - οι επιταχυντές παρέχουν επίσης σενάρια με τη δυνατότητα αποθήκευσης αυθαίρετων μεταβλητών στη μνήμη RAM για γρήγορη πρόσβαση αργότερα. Οι μηχανισμοί προσωρινής αποθήκευσης σελίδων σε πολλά συστήματα διαχείρισης περιεχομένου (CMS) βασίζονται σε αυτή τη δυνατότητα, η οποία επιταχύνει σημαντικά τη δουλειά τους.

Όταν χρησιμοποιείτε έναν προσωπικό διακομιστή ιστού, διατίθενται τέσσερις επιταχυντές που παρέχουν προσωρινή αποθήκευση σεναρίων PHP.

Zend OPCache

Zend OPCache- επιταχύνει την εργασία των τοποθεσιών στη γλώσσα PHP χρησιμοποιώντας την τεχνική της προσωρινής αποθήκευσης μεταγλωττισμένων σεναρίων (opcode) στη μνήμη RAM και την εφαρμογή πρόσθετων βελτιστοποιήσεων. Η δοκιμή της εφαρμογής αυτού του επιταχυντή έδειξε τα βέλτιστα αποτελέσματα για τα περισσότερα CMS σε συνδυασμό με την PHP 5.6.

APC

APC (Εναλλακτική προσωρινή μνήμη PHP)- λογισμικό ανοιχτού κώδικα για την προσωρινή αποθήκευση των αποτελεσμάτων των σεναρίων PHP. Συνιστάται η χρήση της προσωρινής μνήμης APC για τη βελτίωση της απόδοσης των τοποθεσιών που δημιουργούνται σε δημοφιλή CMS όπως το Joomla, το WordPress, το Drupal, το UMI.CMS. Οι PHP 5.6 και 7.0 υποστηρίζουν μονάδες επιτάχυνσης APCu και APCu-bc.

Ηλεκτρονικός Επιταχυντής

Ηλεκτρονικός Επιταχυντής- εκτελεί τις λειτουργίες ενός επιταχυντή, βελτιστοποιητή και αποσυσκευασίας και έχει ενσωματωμένες λειτουργίες δυναμικής προσωρινής αποθήκευσης περιεχομένου. Σύμφωνα με τα αποτελέσματα των δοκιμών που πραγματοποιήθηκαν με εκπροσώπους κατασκευαστών CMS, το eAccelerator συνιστάται για χρήση με το CMS "1C-Bitrix: Διαχείριση τοποθεσίας" και το δημοφιλές HostCMS.

xCache

xCache- αποτελεσματικό για έργα υψηλού φορτίου. Ο επιταχυντής xCache είναι διαθέσιμος μόνο όταν χρησιμοποιείται CMS του οποίου οι κατασκευαστές τον προτείνουν.

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

Ενότητες και επεκτάσεις PHP

ZendOptimizer

Zend Optimizer- μια εφαρμογή από τη Zend Technologies Ltd. Η επέκταση Zend Optimizer είναι μια λειτουργική μονάδα διακομιστή που χρησιμοποιείται για την εκτέλεση σεναρίων κωδικοποιημένων με Zend Encoder και Zend SafeGuard Suite, αυξάνοντας σημαντικά την ταχύτητά τους. Διαθέσιμο μόνο για PHP 5.2.

ionCube Loader

ionCube Loader- λογισμικό που απαιτείται για την αποκωδικοποίηση του πηγαίου κώδικα που κωδικοποιείται με χρήση της τεχνολογίας ionCube Encoder. Συνολικά, το σύνολο βοηθητικών προγραμμάτων ionCube (Κωδικοποιητής και Φορτωτής) σάς επιτρέπει να κωδικοποιήσετε, να θολώσετε και να λάβετε άδεια χρήσης πηγαίου κώδικα PHP.

xDebug

xdebug- Λογισμικό ανοιχτού κώδικα που απαιτείται από έμπειρους προγραμματιστές για τον εντοπισμό σφαλμάτων σε σενάρια ιστότοπου. Η συμπερίληψη του βοηθητικού προγράμματος xDebug με ένταση πόρων υλοποιεί τη δυνατότητα καταγραφής, στην οποία θα καταγράφονται όλες οι ενέργειες, από την πρόσβαση στον ιστότοπο από το πρόγραμμα περιήγησης έως τη λήψη της τελικής σελίδας: εκτέλεση εσωτερικών σεναρίων, δημιουργία ερωτημάτων SQL, πρόσβαση στον ιστότοπο σε τρίτους κομματικοί πόροι κ.λπ.

Βελτιστοποίηση για "1C-Bitrix"

Το δημοφιλές σύστημα διαχείρισης περιεχομένου "1C-Bitrix" έχει μια σειρά από απαιτήσεις συστήματος για τον ιστότοπο φιλοξενίας, συμπεριλαμβανομένης της ρύθμισης συμβολοσειρών πολλών byte, οι οποίες στις σύγχρονες εκδόσεις της PHP πρέπει να αλλάζουν μόνο μέσω του αρχείου php.ini. Τόσο οι έμπειροι προγραμματιστές όσο και οι αρχάριοι χρήστες θα μπορούν να διαμορφώσουν τον μηχανισμό υπερφόρτωσης της συνάρτησης mbstring.func_overload και την υποστηριζόμενη κωδικοποίηση χαρακτήρων mbstring.internal_encoding επιλέγοντας την απαιτούμενη έκδοση στη λίστα βελτιστοποίησης 1C-Bitrix.

Ως αποτέλεσμα της δοκιμής της απόδοσης μιας τοποθεσίας που διαχειρίζεται η 1C-Bitrix, επιτεύχθηκαν τα καλύτερα αποτελέσματα κατά τη χρήση της προτεινόμενης προσωρινής αποθήκευσης χρησιμοποιώντας τον επιταχυντή ZendOPCache σε συνδυασμό με την PHP 5.6.

Για να τεθούν σε ισχύ οι ρυθμίσεις, πρέπει να εφαρμόσετε την επιθυμητή ρύθμιση και να επανεκκινήσετε τον Personal Web Server.

Παρακολουθήσεις (0)

Ενημερώθηκε στις: 2018-03-12

Δημοσιεύτηκε στις: 2016-12-21

Με την πάροδο του χρόνου η PHP προσθέτει λειτουργίες που προωθούν την ανάπτυξη ασφαλών εφαρμογών, καθώς και λειτουργίες που έχουν καταργηθεί ή αφαιρεθεί που διευκόλυνε τη σύνταξη μη ασφαλούς κώδικα.

Διαβάστε αυτό το σεμινάριο για να μάθετε πώς να δημιουργείτε ένα σύγχρονο σύστημα σύνδεσης και εγγραφής που εκμεταλλεύεται τις λειτουργίες που εστιάζουν στην ασφάλεια της PHP και χρησιμοποιεί το jQuery για την αποστολή αιτημάτων AJAX και το Bootstrap για να παρέχει ένα γρήγορο και ωραίο περιβάλλον χρήστη που μπορεί να λειτουργήσει ανεξάρτητα από το εάν χρησιμοποιείτε άλλα πλαίσια ή δεν.



Εάν έχετε ερωτήσεις ή σχόλια, μπορείτε να δημοσιεύσετε ένα μήνυμα ως σχόλιο σε αυτό το άρθρο ή στο .

Αλλαγή αρχείου καταγραφής

27-03-2017: Προστέθηκαν περισσότερες πληροφορίες λήψης και εγκατάστασης χρησιμοποιώντας το εργαλείο συνθέτη.

2017-01-01: Ενημερώθηκε το άρθρο για να αντικατοπτρίζει ότι αυτές συνεχίζουν να είναι ασφαλείς πρακτικές το 2017




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

Συνδεθείτε αμέσως με τον λογαριασμό σας στο:

Καλημερα φιλοι! Ας ρίξουμε μια ματιά στην εγγραφή χρήστη στην PHP. Αρχικά, ας ορίσουμε τις προϋποθέσεις για την εγγραφή χρήστη μας:

  • Ο κωδικός πρόσβασης κρυπτογραφείται χρησιμοποιώντας έναν αλγόριθμο MD5
  • Ο κωδικός θα είναι "salt"
  • Έλεγχος απασχολημένος σύνδεσης
  • Ενεργοποίηση χρήστη με γράμμα.
  • Καταγραφή και αποθήκευση δεδομένων σε DBMS MySQL

Για να γράψουμε αυτό το σενάριο, πρέπει να καταλάβουμε τι είναι η εγγραφή χρήστη. Η εγγραφή χρήστη είναι η λήψη πραγματικών δεδομένων χρήστη, η επεξεργασία και αποθήκευση δεδομένων.

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

Εξουσιοδότηση - παραχώρηση δικαιωμάτων σε ένα συγκεκριμένο άτομο ή ομάδα προσώπων για την εκτέλεση συγκεκριμένων ενεργειών, καθώς και η διαδικασία επαλήθευσης αυτών των δικαιωμάτων κατά την προσπάθεια εκτέλεσης αυτών των ενεργειών. Με απλά λόγια, με τη βοήθεια εξουσιοδότησης, μπορούμε να περιορίσουμε την πρόσβαση σε ένα συγκεκριμένο περιεχόμενο στον ιστότοπό μας.

Ας ρίξουμε μια ματιά στη δομή του καταλόγου σεναρίων για να εφαρμόσουμε τη σύνδεσή μας με εξουσιοδότηση. Πρέπει να χωρίσουμε τα σενάρια σε λογικά μέρη. Τοποθετήσαμε τις ενότητες εγγραφής και εξουσιοδότησης σε ξεχωριστό κατάλογο. Θα τοποθετήσουμε επίσης τη σύνδεση της βάσης δεδομένων σε ξεχωριστούς καταλόγους. MySQL, αρχείο με προσαρμοσμένες λειτουργίες, αρχείο στυλ cssκαι το πρότυπό μας HTML. Αυτή η δομή σάς επιτρέπει να πλοηγηθείτε γρήγορα στα σενάρια. Φανταστείτε ότι έχετε έναν μεγάλο ιστότοπο με ένα σωρό ενότητες και ούτω καθεξής. και αν δεν υπάρχει τάξη, θα είναι πολύ δύσκολο να βρεις κάτι σε τέτοιο χάλι.

Επειδή θα αποθηκεύσουμε όλα τα δεδομένα σε DBMS MySQL, τότε ας δημιουργήσουμε έναν μικρό πίνακα στον οποίο θα αποθηκεύουμε τα δεδομένα εγγραφής.

Πρώτα πρέπει να δημιουργήσετε έναν πίνακα στη βάση δεδομένων. Ας καλέσουμε το τραπέζι bez_regόπου bezείναι το πρόθεμα πίνακα, και regόνομα πίνακα.

Δομή πίνακα: bez_reg

-- -- δομή πίνακα `bez_reg` -- ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ ΑΝ ΔΕΝ ΥΠΑΡΧΕΙ `bez_reg` (`id` int(11) NOT NULL AUTO_INCREMENT, `login` varchar(200) NOT NULL, `pass` varchar(32) NOT NULL , `salt` varchar(32) NOT NULL, `active_hex` varchar(32) NOT NULL, `status` int(1) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Τώρα ας δημιουργήσουμε τα κύρια σενάρια για περαιτέρω εργασία.

ΑΡΧΕΙΟ INDEX.PHP

ΑΡΧΕΙΟ CONFIG.PHP

"); ?>

Αρχείο 404.HTML

Σφάλμα 404

Σφάλμα 404

Υπήρχε ένα σφάλμα 404 στη σελίδα

ΕΠΙΣΤΡΟΦΗ

Αρχείο BD.PHP

ΑΡΧΕΙΟ INDEX.HTML

Εγγραφή χρήστη PHP MySQL με email ενεργοποίησης

ΑΡΧΕΙΟ FUNCT.PHP

"."\n"; if(is_array($data)) ( foreach($data ως $val) $err .= "

  • ".$val."
  • "."\n"; ) else $err .= "
  • ".$data."
  • "."\n"; $err .= ""."\n"; return $err; ) /**Απλό περιτύλιγμα ερωτήματος MySQL * @param string $sql */ συνάρτηση mysqlQuery($sql) ( $res = mysql_query($sql); /* Έλεγχος αποτελέσματος Αυτό δείχνει το πραγματικό ερώτημα που στάλθηκε στη MySQL καθώς και το σφάλμα.*/ if(!$res) ( $message = "Κακό ερώτημα: " . mysql_error() . "\n"; $message .= "Ολόκληρο το ερώτημα : " . $ sql; die($message); ) return $res; ) /**Απλή γεννήτρια αλατιού * @param string $sql */ συνάρτηση salt() ( $salt = substr(md5(uniqid()), - 8); επιστροφή $αλάτι;)

    Ας αρχίσουμε να γράφουμε εγγραφή. Αρχικά, θα χρειαστεί να φτιάξουμε ένα πρότυπο φόρμας εγγραφής ώστε ο χρήστης να μπορεί να εισάγει τα δεδομένα του για επεξεργασία. Στη συνέχεια, θα χρειαστεί να γράψουμε τον ίδιο τον χειριστή φόρμας, ο οποίος θα ελέγχει την ορθότητα των δεδομένων που έχει εισάγει ο χρήστης. Μετά την επιτυχή επαλήθευση των δεδομένων, τα γράφουμε στη βάση δεδομένων μας και στέλνουμε ένα email στον χρήστη για να ενεργοποιήσει τον λογαριασμό του.

    ΑΡΧΕΙΟ REG.PHP

    Έχετε εγγραφεί με επιτυχία! Παρακαλώ ενεργοποιήστε τον λογαριασμό σας!!"; //Ενεργοποίηση του λογαριασμού if(isset($_GET["key"])) ( //Ελέγξτε το κλειδί $sql = "SELECT * FROM `". BEZ_DBPREFIX ."reg` WHERE `active_hex` = "". escape_str ( $_GET["κλειδί"]) ."""; $res = mysqlQuery($sql); if(mysql_num_rows($res) == 0) $err = "Το κλειδί ενεργοποίησης δεν είναι έγκυρο!"; //Έλεγχος για σφάλματα και εμφάνιση στον χρήστη if(count($err) > 0) echo showErrorMessage($err); else ( //Λάβετε τη διεύθυνση του χρήστη $row = mysql_fetch_assoc($res); $email = $row["login"]; //Ενεργοποίηση του χρήστη του λογαριασμού $sql = "UPDATE `".BEZ_DBPREFIX ."reg` SET `status` = 1 WHERE `login` = "".$email ."""; $res = mysqlQuery($sql); / /Αποστολή email ενεργοποίησης $title = "(!LANG:Ο λογαριασμός σας στο http://website έχει ενεργοποιηθεί με επιτυχία"; $message = "Поздравляю Вас, Ваш аккаунт на http://сайт успешно активирован"; sendMessageMail($email, BEZ_MAIL_AUTOR, $title, $message); /*Перенаправляем пользователя на нужную нам страницу*/ header("Location:". BEZ_HOST ."less/reg/?mode=reg&active=ok"); exit; } } /*Если нажата кнопка на регистрацию, начинаем проверку*/ if(isset($_POST["submit"])) { //Утюжим пришедшие данные if(empty($_POST["email"])) $err = "Поле Email не может быть пустым!"; else { if(!preg_match("/^!} [email προστατευμένο](+\.)+(2,6)$/i", $_POST["email"])) $err = "Email εισήχθη λάθος"."\n"; ) if(empty($_POST[ "pass" ])) $err = "Το πεδίο κωδικού πρόσβασης δεν μπορεί να είναι κενό"; if(empty($_POST["pass2"])) $err = "Το πεδίο επιβεβαίωσης κωδικού πρόσβασης δεν μπορεί να είναι κενό"; //Έλεγχος για σφάλματα και εμφάνιση στον χρήστη εάν (count($err) > 0) echo showErrorMessage($err); else ( /*Συνεχίζουμε να ελέγχουμε τα δεδομένα που έχουν εισαχθεί Έλεγχος για αντίστοιχους κωδικούς πρόσβασης*/ if($_POST["pass"] != $_POST["pass2" ]) $err = "Οι κωδικοί πρόσβασης δεν ταιριάζουν"; //Έλεγχος για σφάλματα και εμφάνιση στον χρήστη if(count($err) > 0) echo showErrorMessage($err); else ( /*Ελέγξτε αν έχουμε τέτοιο χρήστη στη βάση δεδομένων* / $sql = "SELECT `login` FROM `".BEZ_DBPREFIX ."reg` WHERE `login` = "".escape_str($_POST["email"]) ."""; $res = mysqlQuery( $sql); if(mysql_num_rows($res) > 0) $err = "Συγγνώμη σύνδεση: ". $_POST["email"] ."απασχολημένος!"; //Έλεγχος για σφάλματα και εμφάνιση στον χρήστη if(count($err) > 0) echo showErrorMessage($err); else ( //Λάβετε το HASH του αλατιού $salt = salt(); // Προσθέστε τον κωδικό πρόσβασης $pass = md5(md5($_POST["pass"]).$salt); /*Αν όλα πάνε καλά, γράψτε δεδομένα στη βάση δεδομένων*/ $sql = "INSERT INTO `". BEZ_DBPREFIX ."reg ` VALUES("", "" .escape_str($_POST["email"]) ."", "". $pass ."", "". $salt ."", "". md5($salt) . "", 0)"; $ res = mysqlQuery($sql); //Αποστολή email ενεργοποίησης $url = BEZ_HOST ."less/reg/?mode=reg&key=". md5($salt); $title = "(! LANG: Εγγραφή στο http:///website"; $message = "Для активации Вашего акаунта пройдите по ссылке ". $url .""; sendMessageMail($_POST["email"], BEZ_MAIL_AUTOR, $title, $message); //Сбрасываем параметры header("Location:". BEZ_HOST ."less/reg/?mode=reg&status=ok"); exit; } } } } ?>!}

    ΑΡΧΕΙΟ REG_FORM.HTML

    Εγγραφή χρήστη PHP MySQL με email ενεργοποίησης

    ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ *:
    Κωδικός πρόσβασης *:
    Επιβεβαίωση κωδικού πρόσβασης *:

    Πεδία με ένα εικονίδιο *απαιτείται

    Εφόσον η εγγραφή χρήστη μας είναι έτοιμη, ήρθε η ώρα να γράψουμε εξουσιοδότηση. Θα δημιουργήσουμε μια φόρμα για εξουσιοδότηση χρήστη, στη συνέχεια θα γράψουμε έναν χειριστή φόρμας εξουσιοδότησης και, τέλος, θα φτιάξουμε ένα σενάριο show.phpπου θα μας δείξει αν είμαστε εξουσιοδοτημένοι στο σύστημα ή όχι.

    ΑΡΧΕΙΟ AUTH.PHP

    0) echo showErrorMessage($err); else ( /*Δημιουργήστε ένα ερώτημα ανάκτησης από τη βάση δεδομένων για τον έλεγχο ταυτότητας του χρήστη*/ $sql = "SELECT * FROM `". BEZ_DBPREFIX ."reg` WHERE `login` = "". escape_str($_POST["email"]) ."" ΚΑΙ `status` = 1"; $res = mysqlQuery($sql); //Εάν η σύνδεση ταιριάζει, ελέγξτε τον κωδικό πρόσβασης if(mysql_num_rows($res) > 0) ( //Λήψη δεδομένων από τον πίνακα $row = mysql_fetch_assoc( $res); if(md5(md5($_POST["pass"]).$row["salt"]) == $row["pass"]) ($_SESSION["user"] = true; // Επαναφορά παραμέτρων κεφαλίδας("Τοποθεσία:". BEZ_HOST ."less/reg/?mode=auth"); έξοδος; ) else echo showErrorMessage("Λάθος κωδικός πρόσβασης!"); ) else echo showErrorMessage("Σύνδεση ". $_POST["email"] ."δεν βρέθηκε!"); ) ) ?>

    Για όσους έχουν την πιο πρόσφατη έκδοση της PHP, δημοσιεύω αυτό το σενάριο χρησιμοποιώντας Π.Ο.Πεπειδή επέκταση MySQLέχει καταργηθεί και έχει αφαιρεθεί από τη νέα έκδοση της PHP. Λήψη εγγραφής και εξουσιοδότησης php mysql pdo

    Το αρχείο ενημερώθηκε στις 24 Φεβρουαρίου 2015.

    Προσοχή:Εάν χρησιμοποιείτε αυτό το σενάριο σε έναν τοπικό διακομιστή όπως DENWER,XAMPP, τότε δεν πρέπει να περιμένετε γράμματα στο γραμματοκιβώτιό σας. Τα γράμματα βρίσκονται στο στέλεχος αποστολή αλληλογραφίας. ΣΤΟ Ντένβερμπορείτε να τα βρείτε στην πορεία Z:\tmp\!sendmail\Μπορείτε να ανοίξετε αυτά τα αρχεία σε οποιοδήποτε πρόγραμμα-πελάτη email.

    Γειά σου! Τώρα θα προσπαθήσουμε να εφαρμόσουμε την απλούστερη εγγραφή στον ιστότοπο χρησιμοποιώντας PHP + MySQL. Για να γίνει αυτό, το Apache πρέπει να είναι εγκατεστημένο στον υπολογιστή σας. Το πώς λειτουργεί το σενάριό μας φαίνεται παρακάτω.

    1. Ας ξεκινήσουμε δημιουργώντας τον πίνακα χρηστών στη βάση δεδομένων. Θα περιέχει δεδομένα χρήστη (σύνδεση και κωδικό πρόσβασης). Ας πάμε στο phpmyadmin (αν δημιουργήσετε μια βάση δεδομένων στον υπολογιστή σας http://localhost/phpmyadmin/). Δημιουργήστε έναν πίνακα χρήστες, θα έχει 3 πεδία.

    Το δημιουργώ στη βάση δεδομένων mysql, μπορείτε να το δημιουργήσετε σε άλλη βάση δεδομένων. Στη συνέχεια, ορίστε τις τιμές, όπως στο σχήμα:

    2. Απαιτείται σύνδεση σε αυτόν τον πίνακα.Ας δημιουργήσουμε ένα αρχείο bd.php. Το ΠΕΡΙΕΧΟΜΕΝΟ ΤΟΥ:

    $db = mysql_connect("ο διακομιστής MySQL σας", "σύνδεση σε αυτόν τον διακομιστή", "κωδικός πρόσβασης σε αυτόν τον διακομιστή");
    mysql_select_db ("όνομα της βάσης δεδομένων προς σύνδεση", $db);
    ?>

    Στην περίπτωσή μου μοιάζει με αυτό:

    $db = mysql_connect("localhost","user","1234");
    mysql_select_db("mysql",$db);
    ?>

    Αποταμιεύουμε bd.php.
    Εξοχος! Έχουμε έναν πίνακα στη βάση δεδομένων, μια σύνδεση με αυτόν. Τώρα μπορείτε να ξεκινήσετε τη δημιουργία μιας σελίδας όπου οι χρήστες θα αφήνουν τα δεδομένα τους.

    3. Δημιουργήστε ένα αρχείο reg.php με περιεχόμενο (όλα τα σχόλια μέσα):



    Εγγραφή


    Εγγραφή
















    4. Δημιουργήστε ένα αρχείο, το οποίο θα εισάγει δεδομένα στη βάση δεδομένων και θα αποθηκεύσει τον χρήστη. save_user.php(σχόλια μέσα):



    {
    }
    //εάν εισαγάγετε τη σύνδεση και τον κωδικό πρόσβασης, τότε τα επεξεργαζόμαστε έτσι ώστε οι ετικέτες και τα σενάρια να μην λειτουργούν, ποτέ δεν ξέρετε τι μπορούν να εισαγάγουν οι χρήστες


    // αφαιρέστε επιπλέον κενά
    $login = trim($login);
    $password = trim($password);
    // σύνδεση στη βάση δεδομένων
    // ελέγξτε για την ύπαρξη χρήστη με την ίδια σύνδεση
    $result = mysql_query("SELECT id FROM users WHERE login="$login"",$db);
    if (!empty($myrow["id"])) (
    exit("Λυπούμαστε, το όνομα χρήστη που εισαγάγατε είναι ήδη εγγεγραμμένο. Εισαγάγετε άλλο όνομα χρήστη.");
    }
    // αν δεν υπάρχει, τότε αποθηκεύστε τα δεδομένα
    $result2 = mysql_query ("INSERT INTO users (login,password) VALUES("$login","$password")");
    // Ελέγξτε εάν υπάρχουν σφάλματα
    εάν ($result2=="TRUE")
    {
    echo "Έχετε εγγραφεί με επιτυχία! Τώρα μπορείτε να εισέλθετε στον ιστότοπο. Κεντρική σελίδα";
    }
    αλλού(
    echo "Σφάλμα! Δεν είστε συνδεδεμένοι.";
    }
    ?>

    5. Τώρα οι χρήστες μας μπορούν να εγγραφούν!Στη συνέχεια, πρέπει να δημιουργήσετε μια "πόρτα" για να εισέλθετε στον ιστότοπο για ήδη εγγεγραμμένους χρήστες. index.php(σχόλια μέσα):

    // όλη η διαδικασία λειτουργεί σε συνεδρίες. Σε αυτό αποθηκεύονται τα δεδομένα του χρήστη ενώ βρίσκεται στον ιστότοπο. Είναι πολύ σημαντικό να τα λανσάρουμε στην αρχή κιόλας της σελίδας!!!
    session_start();
    ?>


    Κύρια σελίδα


    Κύρια σελίδα











    Κανω ΕΓΓΡΑΦΗ



    // Ελέγξτε εάν οι μεταβλητές σύνδεσης και αναγνωριστικού χρήστη είναι κενές
    εάν (κενό($_SESSION["login"]) ή κενό($_SESSION["id"]))
    {
    // Εάν είναι κενό, δεν εμφανίζεται ο σύνδεσμος
    echo "Έχετε συνδεθεί ως επισκέπτης
    Αυτός ο σύνδεσμος είναι διαθέσιμος μόνο σε εγγεγραμμένους χρήστες".
    }
    αλλού
    {

    Στο αρχείο index.phpθα εμφανίσουμε έναν σύνδεσμο που θα είναι ανοιχτός μόνο σε εγγεγραμμένους χρήστες. Αυτό είναι όλο το νόημα του σεναρίου - ο περιορισμός της πρόσβασης σε οποιαδήποτε δεδομένα.

    6. Υπάρχει ένα αρχείο με επαλήθευση των εισαγόμενων στοιχείων σύνδεσης και κωδικού πρόσβασης. testreg.php (σχόλια μέσα):

    session_start();// όλη η διαδικασία λειτουργεί σε συνεδρίες. Σε αυτό αποθηκεύονται τα δεδομένα του χρήστη ενώ βρίσκεται στον ιστότοπο. Είναι πολύ σημαντικό να τα λανσάρουμε στην αρχή κιόλας της σελίδας!!!
    if (isset($_POST["login"])) ($login = $_POST["login"]; if ($login == "") ( unset($login);) ) //βάλτε τη σύνδεση που έχει εισαχθεί από ο χρήστης στη μεταβλητή $login, εάν είναι κενή, τότε καταστρέφουμε τη μεταβλητή
    if (isset($_POST["password"])) ( $password=$_POST["password"]; if ($password =="") ( unset($password);) )
    //βάλτε τον κωδικό πρόσβασης που εισήγαγε ο χρήστης στη μεταβλητή $password, εάν είναι κενός, τότε καταστρέψτε τη μεταβλητή
    εάν (κενό($login) ή κενό($password)) //εάν ο χρήστης δεν έχει εισαγάγει στοιχεία σύνδεσης ή κωδικό πρόσβασης, τότε παρουσιάζουμε ένα σφάλμα και διακόπτουμε το σενάριο
    {
    exit ("Δεν εισαγάγατε όλες τις πληροφορίες, επιστρέψτε και συμπληρώστε όλα τα πεδία!");
    }
    //εάν εισαγάγετε τη σύνδεση και τον κωδικό πρόσβασης, τότε τα επεξεργαζόμαστε έτσι ώστε οι ετικέτες και τα σενάρια να μην λειτουργούν, ποτέ δεν ξέρετε τι μπορούν να εισαγάγουν οι χρήστες
    $login = stripslashes($login);
    $login = htmlspecialchars($login);
    $password = stripslashes($password);
    $password = htmlspecialchars($password);
    // αφαιρέστε επιπλέον κενά
    $login = trim($login);
    $password = trim($password);
    // σύνδεση στη βάση δεδομένων
    include("bd.php");// το αρχείο bd.php θα πρέπει να βρίσκεται στον ίδιο φάκελο με όλους τους άλλους, αν δεν είναι, απλώς αλλάξτε τη διαδρομή

    $result = mysql_query("SELECT * FROM users WHERE login="$login"",$db); //ανάκτηση όλων των δεδομένων σχετικά με τον χρήστη με την είσοδο από τη βάση δεδομένων
    $myrow = mysql_fetch_array($result);
    if (κενό($myrow["password"]))
    {
    //αν δεν υπάρχει ο χρήστης με τα καταχωρημένα στοιχεία σύνδεσης
    }
    αλλού(
    //αν υπάρχει, ελέγξτε τους κωδικούς πρόσβασης
    αν ($myrow["password"]==$password) (
    //αν οι κωδικοί πρόσβασης ταιριάζουν, τότε ξεκινάμε τη συνεδρία για τον χρήστη! Μπορείτε να τον συγχαρείτε, μπήκε!
    $_SESSION["login"]=$myrow["login"];
    $_SESSION["id"]=$myrow["id"];//αυτά τα δεδομένα χρησιμοποιούνται πολύ συχνά, επομένως ο συνδεδεμένος χρήστης θα τα "μεταφέρει"
    echo "Έχετε συνδεθεί με επιτυχία στον ιστότοπο! Κεντρική σελίδα";
    }
    αλλού(
    //αν οι κωδικοί πρόσβασης δεν ταιριάζουν

    Έξοδος ("Λυπούμαστε, η σύνδεση ή ο κωδικός πρόσβασης που εισαγάγατε είναι λάθος.");
    }
    }
    ?>

    ΟΚ όλα τελείωσαν τώρα! Ίσως το μάθημα να είναι βαρετό, αλλά πολύ χρήσιμο. Εδώ εμφανίζεται μόνο η ιδέα της εγγραφής, μπορείτε περαιτέρω να τη βελτιώσετε: προσθέστε προστασία, σχεδιασμό, πεδία δεδομένων, μεταφόρτωση avatar, αποσύνδεση από τον λογαριασμό (για αυτό, απλώς καταστρέψτε τις μεταβλητές από τη συνεδρία με τη συνάρτηση απενεργοποίηση) και ούτω καθεξής. Καλή τύχη!

    Έλεγξε τα πάντα, λειτουργεί μια χαρά!