Πώς να ορίσετε την περίοδο λειτουργίας σε CodeΑνάφλεξη με παράδειγμα
⚡ Έξυπνη Σύνοψη
CodeΗ Διαχείριση Περιόδων Λειτουργίας του Igniter αποθηκεύει δεδομένα χρήστη σε αιτήματα HTTP χωρίς κατάσταση, επιτρέποντας σε μια εφαρμογή να θυμάται έναν συνδεδεμένο χρήστη, στοιχεία καλαθιού αγορών ή εφάπαξ flash μηνύματα. Αυτό το παράδειγμα δημιουργεί flash μηνύματα και μια προσομοιωμένη σύνδεση χρησιμοποιώντας το CodeΒιβλιοθήκη συνεδριών Igniter.
CodeΔιαχείριση συνεδρίας ανάφλεξης
Αν έχετε αναπτύξει εφαρμογές για υπολογιστές στο παρελθόν, τότε πιθανότατα γνωρίζετε ότι μπορείτε να ορίσετε μια καθολική μεταβλητή, να της αντιστοιχίσετε μια τιμή και να τη χρησιμοποιήσετε καθ' όλη τη διάρκεια του κύκλου ζωής της εφαρμογής. Ανοίγοντας και κλείνοντας περισσότερες από μία φόρμες, κάθε αίτημα θα έχει πρόσβαση στην καθολική μεταβλητή.
Με άλλα λόγια, η κατάσταση της εφαρμογής διατηρείται. Δηλαδή, εάν κατά τη σύνδεση ορίσετε το όνομα της εταιρείας σε μια καθολική μεταβλητή, τότε ακόμη και μετά το κλείσιμο της φόρμας σύνδεσης, η κατάσταση του ονόματος της εταιρείας διατηρείται.
Το HTTP λειτουργεί λίγο διαφορετικά από το σενάριο που μόλις περιγράψαμε. Είναι χωρίς κατάσταση. Δηλαδή, ό,τι κάνετε σε ένα αίτημα δεν παραμένει στο επόμενο αίτημα.
Για να επιλύσουμε αυτό το πρόβλημα, έχουμε δύο (2) λύσεις σε PHP. Μπορούμε είτε να εργαστούμε με cookies, τα οποία είναι μικρά αρχεία που τοποθετούνται στον υπολογιστή του χρήστη, είτε να εργαστούμε με συνεδρίες, οι οποίες είναι παρόμοιες με τα cookies αλλά αποθηκεύονται στον διακομιστή και έχουν μεγαλύτερη χωρητικότητα από τα cookies.
Πότε να χρησιμοποιείτε συνεδρίες;
Οι συνεδρίες είναι συνήθως χρήσιμες όταν θέλετε να γνωρίζετε τις δραστηριότητες του χρήστη από σελίδα σε σελίδα. Για παράδειγμα, ας υποθέσουμε ότι έχετε μια προστατευμένη περιοχή στον ιστότοπο. Οι χρήστες δεν χρειάζεται να συνδέονται σε κάθε σελίδα. Μπορείτε να επιτρέψετε στον χρήστη να συνδεθεί μία φορά και να αποθηκεύσει τα στοιχεία του σε μια μεταβλητή συνεδρίας και, στη συνέχεια, να επαναχρησιμοποιήσει τα ίδια δεδομένα σε περαιτέρω αιτήματα. Άλλες περιπτώσεις χρήσης περιλαμβάνουν την εργασία σε ένα κατάστημα.ping σύστημα και ο χρήστης πρέπει να προσθέσει είδη στο κατάστημαping καροτσάκι.
Εναλλακτικά, CodeΤο Igniter χρησιμοποιεί επίσης συνεδρίες για να κάνει τα δεδομένα διαθέσιμα μόνο μία φορά στο επόμενο αίτημα. Αυτό είναι χρήσιμο όταν έχετε επεξεργαστεί και ενημερώσει μια εγγραφή βάσης δεδομένων και θέλετε να επιστρέψετε κάποια σχόλια στον χρήστη όταν ανακατευθυνθεί σε άλλη σελίδα.
Αποστολή μηνυμάτων 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'] = 'sessioncontroller'; $route['flash_message'] = 'sessioncontroller/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')); }
ΕΔΩ,
- Η public function check_auth($page) {…} ορίζει τη μέθοδο που ελέγχει αν ο χρήστης είναι συνδεδεμένος και, στη συνέχεια, επιτρέπει την πρόσβαση στη σελίδα. Εάν ένας χρήστης δεν είναι συνδεδεμένος, τότε ο χρήστης ανακατευθύνεται στη σελίδα σύνδεσης με ένα στιγμιαίο μήνυμα.
- Η public function login() {…} φορτώνει την προβολή σύνδεσης που βρίσκεται στον κατάλογο sessions.
- η δημόσια συνάρτηση authenticate() {…} ορίζει τα δεδομένα χρήστη της περιόδου σύνδεσης για τα κλειδιά loged_in και το όνομα χρήστη. ΣΗΜΕΙΩΣΗ: Δεν επαληθεύουμε στοιχεία σύνδεσης στη βάση δεδομένων. Απλώς υποθέτουμε ότι οι υποβληθείσες λεπτομέρειες είναι εντάξει και ορίζουμε τα δεδομένα περιόδου σύνδεσης.
- Η public function dashboard() {…} φορτώνει τη σελίδα του dashboard μετά την κλήση της $this->check_auth('dashboard'); η οποία επαληθεύει ότι το κλειδί συνεδρίας loged_in έχει οριστεί.
- public function settings() {…} φορτώνει τη σελίδα ρυθμίσεων, η οποία είναι επίσης προστατευμένη.
- δημόσια συνάρτηση logout() {…} καταστρέφει τα δεδομένα συνεδρίας και αποσυνδέει τον χρήστη. Η μέθοδος ανακατευθύνει επίσης στη σελίδα σύνδεσης
CodeΠροβολές περιόδου λειτουργίας του Igniter
Δημιουργήστε τις ακόλουθες προβολές σε εφαρμογή/προβολές/περιόδους σύνδεσης
- ταμπλό.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:0 </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(3);?></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:0 </head> <body> <div class="container"> <div class="column"> <p><?=$this->session->userdata(1);?></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="password" 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:0 </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
Θα μεταφερθείτε στην ακόλουθη σελίδα
Κάντε κλικ στο κουμπί Είσοδος
Θα δείτε τα παρακάτω αποτελέσματα
Αφού συνδεθούμε, μπορούμε πλέον να δούμε τα δεδομένα της περιόδου σύνδεσης.





