Πώς να ορίσετε τη συνεδρία στο Codeigniter με Παράδειγμα
CodeIgniter Session Management
Εάν έχετε αναπτύξει εφαρμογές για επιτραπέζιους υπολογιστές πριν από τότε, πιθανότατα γνωρίζετε ότι μπορείτε να ορίσετε μια καθολική μεταβλητή να της εκχωρήσετε μια τιμή και να τη χρησιμοποιήσετε καθ' όλη τη διάρκεια του κύκλου ζωής της εφαρμογής που ανοίγει και κλείνει περισσότερες από μία (1) και κάθε αίτημα θα έχει πρόσβαση σε η καθολική μεταβλητή.
Με άλλα λόγια, διατηρείται η κατάσταση της εφαρμογής. Δηλαδή, εάν όταν συνδέεστε ορίζετε το όνομα της εταιρείας σε μια καθολική μεταβλητή, τότε ακόμη και μετά το κλείσιμο της φόρμας σύνδεσης διατηρείται αυτή η κατάσταση του ονόματος της εταιρείας.
Το HTTP λειτουργεί λίγο διαφορετικά από το παραπάνω σενάριο που μόλις περιγράψαμε. Είναι ανιθαγενής. Δηλαδή, λέτε ότι ό,τι κάνετε σε ένα αίτημα δεν επιμένει στο επόμενο αίτημα. Τ
o επιλύστε αυτό το πρόβλημα. Έχουμε δύο (2) λύσεις σε PHP. Μπορούμε είτε να εργαστούμε με cookies που είναι μικρά αρχεία που τοποθετούνται στον υπολογιστή του χρήστη είτε να εργαστούμε με περιόδους σύνδεσης που είναι παρόμοιες με τα cookies αλλά είναι αποθηκευμένα στον διακομιστή και έχουν μεγαλύτερη χωρητικότητα από τα cookies.
Πότε να χρησιμοποιείτε συνεδρίες;
Οι περίοδοι σύνδεσης είναι συνήθως χρήσιμες όταν θέλετε να μάθετε τις δραστηριότητες του χρήστη από σελίδα σε σελίδα. Για παράδειγμα, ας υποθέσουμε ότι έχετε μια προστατευμένη περιοχή στον ιστότοπο. Οι χρήστες δεν χρειάζεται να συνδεθούν σε κάθε σελίδα. Μπορείτε να αφήσετε τον χρήστη να συνδεθεί μία φορά και να αποθηκεύσει τα στοιχεία του σε μια μεταβλητή περιόδου λειτουργίας και στη συνέχεια να επαναχρησιμοποιήσετε τα ίδια δεδομένα σε περαιτέρω αιτήματα. Άλλες περιπτώσεις χρήσης περιλαμβάνουν όταν εργάζεστε σε ένα σύστημα αγορών και ο χρήστης πρέπει να προσθέσει προϊόντα στο καλάθι αγορών.
Εναλλακτικά, το CodeIgniter χρησιμοποιεί επίσης περιόδους σύνδεσης για να κάνει τα δεδομένα διαθέσιμα μόνο μία φορά στο επόμενο αίτημα. Αυτό είναι χρήσιμο που μπορείτε να επεξεργαστείτε και να ενημερώσετε μια εγγραφή βάσης δεδομένων και θέλετε να επιστρέψετε κάποια σχόλια στον χρήστη όταν ανακατευθυνθεί σε άλλη σελίδα.
Αποστολή μηνυμάτων Flash σε άλλες σελίδες με CI Sessions
Σε αυτήν την ενότητα, θα μάθετε για την αποστολή μηνυμάτων flash σε άλλες σελίδες χρησιμοποιώντας τη βιβλιοθήκη συνεδριών στο CodeIgniter
Δημιουργήστε ένα νέο αρχείο SessionController στο
application/controllers/SessionController.php
Προσθέστε τον παρακάτω κώδικα
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class SessionController extends CI_Controller { public function __construct() { parent:: __construct(); $this->load->helper('url'); $this->load->library('session'); } public function index() { $this->load->view('sessions/index'); } public function flash_message(){ $this->session->set_flashdata('msg', 'Welcome to CodeIgniter Flash Messages'); redirect(base_url('flash_index')); } }
ΕΔΩ,
- class SessionController επεκτείνει το CI_Controller {…} ορίζει την κλάση SessionController και επεκτείνει την κλάση γονικού ελεγκτή.
- Η δημόσια συνάρτηση __construct() {…} ορίζει τη μέθοδο κατασκευής που αρχικοποιεί τη γονική κλάση και φορτώνει τη βοηθητική διεύθυνση url και τη βιβλιοθήκη συνεδρίας.
- δημόσια συνάρτηση index() {…} ορίζει τη μέθοδο ευρετηρίου συνεδρίας που φορτώνει την προβολή ευρετηρίου συνεδρίας.
- η δημόσια συνάρτηση flash_message(){…} ορίζει τη μέθοδο του μηνύματος flash που ορίζει τα δεδομένα flash και στη συνέχεια ανακατευθύνει στη διαδρομή flash_index
Ας δημιουργήσουμε τώρα την προβολή που θα εμφανίζει την τιμή των δεδομένων περιόδου λειτουργίας.
Δημιουργήστε μια νέα περίοδο λειτουργίας καταλόγου σε εφαρμογή/προβολές
Δημιουργήστε ένα νέο αρχείο index.php σε application/views/sessions
Προσθέστε τον παρακάτω κώδικα
<html> <head> <title>Code Igniter Flash Session</title> </head> <body> <p>The session value of msg is <b> <?=$this->session->userdata('msg');?> </b></p> </body> </html>
ΕΔΩ,
session->userdata('msg');?> ανακτά την τιμή των δεδομένων συνεδρίας με το κλειδί του msg και την εμφανίζει στο πρόγραμμα περιήγησης.
Ας δημιουργήσουμε τώρα τις διαδρομές για τη μέθοδο flash περιόδου λειτουργίας μας
Ανοίξτε το application/config/routes.php
Προσθέστε τις ακόλουθες γραμμές
$route['flash_index'] = 'session controller'; $route['flash_message'] = 'session controller/flash_message';
Ας ξεκινήσουμε τώρα τον ενσωματωμένο διακομιστή για PHP και δοκιμάστε τα μηνύματα flash μας
Ανοίξτε το τερματικό
Εκτελέστε την ακόλουθη εντολή
cd C:\Sites\ci-app php -S localhost:3000
ΕΔΩ,
Η παραπάνω εντολή περιηγείται στον κατάλογο κώδικα της εφαρμογής και ξεκινά τον ενσωματωμένο διακομιστή στη θύρα 3000.
Σημείωση: η διαδρομή της εφαρμογής πρέπει να ταιριάζει με τη διαδρομή όπου κάνατε λήψη του CodeIgniter και μπορείτε να χρησιμοποιήσετε οποιονδήποτε αριθμό θύρας είναι δωρεάν στον υπολογιστή σας. Δεν είναι απαραίτητο να χρησιμοποιήσετε τη θύρα 3000.
Φορτώστε την ακόλουθη διεύθυνση URL στο πρόγραμμα περιήγησής σας: http://localhost:3000/flash_message
Θα ανακατευθυνθείτε στην ακόλουθη διεύθυνση URL και θα λάβετε τα ακόλουθα αποτελέσματα: http://localhost:3000/flash_index
Κάντε κλικ στο κουμπί ανανέωσης του προγράμματος περιήγησής σας ή πατήστε F5
Τώρα θα λάβετε τα ακόλουθα αποτελέσματα
Αποθήκευση δεδομένων χρήστη σε περιόδους λειτουργίας CI
Ας δούμε τώρα ένα ελαφρώς πιο προχωρημένο παράδειγμα. Για να το κάνουμε απλό, θα προσομοιώσουμε τον έλεγχο ταυτότητας χρήστη και δεν θα κάνουμε την πραγματική υλοποίηση της επαλήθευσης της εγγραφής χρήστη στη βάση δεδομένων και του υποβληθέντος κωδικού πρόσβασης.
Ας ξεκινήσουμε με τις διαδρομές
Ανοίξτε το routes.php που βρίσκεται στο application/config
Προσθέστε τις ακόλουθες διαδρομές
$route['login'] = 'sessioncontroller/login'; $route['authenticate'] = 'sessioncontroller/authenticate'; $route['settings'] = 'sessioncontroller/settings'; $route['dashboard'] = 'sessioncontroller/dashboard'; $route['logout'] = 'sessioncontroller/logout';
ΕΔΩ,
- $route['login'] = 'sessioncontroller/login'; ορίζει τη διαδρομή που εμφανίζει τη φόρμα σύνδεσης
- $route['authenticate'] = 'sessioncontroller/authenticate'; ορίζει τη διαδρομή που προσομοιώνει την επιτυχημένη σύνδεση χρήστη και ορίζει τα δεδομένα σύνδεσης περιόδου σύνδεσης.
- $route['settings'] = 'sessioncontroller/settings'; ορίζει μια προστατευμένη σελίδα στην οποία θα πρέπει να έχουν πρόσβαση μόνο οι συνδεδεμένοι χρήστες
- $route['dashboard'] = 'sessioncontroller/dashboard'; ορίζει μια προστατευμένη σελίδα στην οποία θα πρέπει να έχουν πρόσβαση μόνο οι συνδεδεμένοι χρήστες.
- $route['logout'] = 'sessioncontroller/logout'; αποσυνδέει τον χρήστη καταστρέφοντας τα δεδομένα της περιόδου σύνδεσης
Ας ενημερώσουμε τώρα το SessionController
Ανοίξτε την εφαρμογή/ελεγκτές/SessionController.php
Προσθέστε τις ακόλουθες μεθόδους
public function check_auth($page) { if (!$this->session->userdata('logged_in')) { $this->session->set_flashdata('msg', "You need to be logged in to access the $page page."); redirect('login'); } } public function login() { $this->load->view('sessions/login'); } public function authenticate() { $this->session->set_userdata('username', 'John Doe'); $this->session->set_userdata('logged_in', TRUE); redirect(base_url('dashboard')); } public function dashboard() { $this->check_auth('dashboard'); $this->load->view('sessions/dashboard'); } public function settings() { $this->check_auth('settings'); $this->load->view('sessions/settings'); } public function logout() { $this->session->unset_userdata('username'); $this->session->unset_userdata('logged_in'); redirect(base_url('login')); }
ΕΔΩ,
- δημόσια συνάρτηση check_auth($page) {…} ορίζει τη μέθοδο που ελέγχει εάν ο χρήστης είναι συνδεδεμένος και στη συνέχεια επιτρέπει την πρόσβαση στη σελίδα. Εάν ένας χρήστης δεν είναι συνδεδεμένος, τότε ο χρήστης ανακατευθύνεται στη σελίδα σύνδεσης με ένα μήνυμα flash.
- δημόσια συνάρτηση login() {…} φορτώνει την προβολή σύνδεσης που βρίσκεται στον κατάλογο συνεδριών.
- η δημόσια συνάρτηση authenticate() {…} ορίζει τα δεδομένα χρήστη της περιόδου σύνδεσης για τα κλειδιά loged_in και το όνομα χρήστη. ΣΗΜΕΙΩΣΗ: Δεν επαληθεύουμε στοιχεία σύνδεσης στη βάση δεδομένων. Απλώς υποθέτουμε ότι οι υποβληθείσες λεπτομέρειες είναι εντάξει και ορίζουμε τα δεδομένα περιόδου σύνδεσης.
- δημόσια συνάρτηση dashboard() {…} φορτώνει τη σελίδα του πίνακα ελέγχου αφού καλέσει το $this->check_auth('dashboard'); το οποίο επαληθεύει ότι έχει οριστεί το κλειδί συνεδρίας loged_in.
- Ρυθμίσεις δημόσιας λειτουργίας() {…} φορτώνει τη σελίδα ρυθμίσεων που είναι επίσης προστατευμένη
- δημόσια συνάρτηση logout() {…} καταστρέφει τα δεδομένα συνεδρίας και αποσυνδέει τον χρήστη. Η μέθοδος ανακατευθύνει επίσης στη σελίδα σύνδεσης
Προβολές συνεδρίας CodeIgniter
Δημιουργήστε τις ακόλουθες προβολές σε εφαρμογή/προβολές/περιόδους σύνδεσης
- ταμπλό.php
- login.php
- settings.php
Προσθέστε τον ακόλουθο κώδικα στο dashboard.php
<!DOCTYPE html> <html> <head> <title>Dashboard</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css"> </head> <body> <div class="container"> <div class="column"> <nav class="navbar" role="navigation" aria-label="main navigation"> <div id="navbarBasicExample" class="navbar-menu"> <div class="navbar-start"> <a href="<?= site_url('dashboard')?>" class="navbar-item is-active">Dashboard</a> <a href="<?= site_url('settings')?>" class="navbar-item">Settings</a> </div> <div class="navbar-end"> <div class="navbar-item has-dropdown is-hoverable"> <a class="navbar-link"><?=$this->session->userdata('username');?></a> <div class="navbar-dropdown"> <a class="navbar-item">My Profile</a> <hr class="navbar-divider"> <a class="navbar-item">Sign out</a> </div> </div> </div> </div> </nav> <h3>Welcome Page</h3> </div> </div> </body> </html>
ΕΔΩ,
session->userdata('username');?> εμφανίζει το όνομα χρήστη που ορίσαμε στη μέθοδο ελέγχου ταυτότητας
Προσθέστε τον ακόλουθο κώδικα στο login.php
<!DOCTYPE html> <html> <head> <title>Login</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css"> </head> <body> <div class="container"> <div class="column"> <p><?=$this->session->userdata('msg');?></p> <form method="post" action="<?= site_url('authenticate')?>"> <div class="field"> <label class="label">Username</label> <div class="control"> <input class="input" type="text" placeholder="Text input"> </div> </div> <div class="field"> <label class="label">Password</label> <div class="control"> <input class="input" type="passport" placeholder="Text input"> </div> </div> <div class="field is-grouped"> <div class="control"> <button class="button is-success">Login</button> </div> </div> </form> </div> </div> </body> </html>
ΕΔΩ,
Η φόρμα σύνδεσης υποβάλλεται για έλεγχο ταυτότητας διαδρομής.
Προσθέστε τον ακόλουθο κώδικα στο settings.php
<!DOCTYPE html> <html> <head> <title>Settings</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css"> </head> <body> <div class="container"> <div class="column"> <nav class="navbar" role="navigation" aria-label="main navigation"> <div id="navbarBasicExample" class="navbar-menu"> <div class="navbar-start"> <a href="<?= site_url('dashboard')?>" class="navbar-item">Dashboard</a> <a href="<?= site_url('settings')?>" class="navbar-item">Settings</a> </div> <div class="navbar-end"> <div class="navbar-item has-dropdown is-hoverable"> <a class="navbar-link">Jim Jones</a> <div class="navbar-dropdown"> <a href="#" class="navbar-item">My Profile</a> <hr class="navbar-divider"> <a href="<?= site_url('logout')?>" class="navbar-item">Sign out</a> </div> </div> </div> </div> </nav> <h3>Settings Page</h3> </div> </div> </body> </html>
Αυτά για τις απόψεις μας. Ας δοκιμάσουμε τώρα την εφαρμογή μας.
Σε αυτό το σεμινάριο, χρησιμοποιούμε τον ενσωματωμένο διακομιστή ιστού PHP, αλλά μπορείτε να χρησιμοποιήσετε οποιονδήποτε διακομιστή ιστού που υποστηρίζει PHP.
Ανοίξτε το τερματικό
Εκτελέστε την ακόλουθη εντολή
cd C:\Sites\ci-app php -S localhost:3000
ΕΔΩ,
Η παραπάνω εντολή περιηγείται στον κατάλογο κώδικα της εφαρμογής και ξεκινά τον ενσωματωμένο διακομιστή στη θύρα 3000.
Σημείωση: η διαδρομή της εφαρμογής πρέπει να ταιριάζει με τη διαδρομή όπου κάνατε λήψη του CodeIgniter και μπορείτε να χρησιμοποιήσετε οποιονδήποτε αριθμό θύρας είναι δωρεάν στον υπολογιστή σας. Δεν είναι απαραίτητο να χρησιμοποιήσετε τη θύρα 3000.
Ανοίξτε την ακόλουθη διεύθυνση URL στο πρόγραμμα περιήγησής σας: http://localhost:3000/dashboard
θα ανακατευθυνθείτε στην παρακάτω σελίδα
Κάντε κλικ στο κουμπί Είσοδος
Θα δείτε τα παρακάτω αποτελέσματα
Αφού συνδεθούμε, μπορούμε πλέον να δούμε τα δεδομένα της περιόδου σύνδεσης.
Σύνοψη
Σε αυτό το σεμινάριο, μάθατε τα βασικά της βιβλιοθήκης συνεδρίας CodeIgniter και μάθετε πώς να τη χρησιμοποιείτε για την αποθήκευση χρονικών δεδομένων ως μηνύματα flash και πώς να χρησιμοποιείτε την αποθήκευση πιο μόνιμων δεδομένων, π.χ. δεδομένα σύνδεσης χρήστη.