Πώς να ορίσετε την περίοδο λειτουργίας σε CodeΑνάφλεξη με παράδειγμα

⚡ Έξυπνη Σύνοψη

CodeΗ Διαχείριση Περιόδων Λειτουργίας του Igniter αποθηκεύει δεδομένα χρήστη σε αιτήματα HTTP χωρίς κατάσταση, επιτρέποντας σε μια εφαρμογή να θυμάται έναν συνδεδεμένο χρήστη, στοιχεία καλαθιού αγορών ή εφάπαξ flash μηνύματα. Αυτό το παράδειγμα δημιουργεί flash μηνύματα και μια προσομοιωμένη σύνδεση χρησιμοποιώντας το CodeΒιβλιοθήκη συνεδριών Igniter.

  • 🌐 Γιατί Συνεδρίες: Το HTTP είναι χωρίς κατάσταση, επομένως οι συνεδρίες διατηρούν δεδομένα χρήστη, όπως η κατάσταση σύνδεσης, σε ξεχωριστά αιτήματα σελίδας στον διακομιστή.
  • 🍪 Cookies έναντι Περιόδων Λειτουργίας: Τα cookies αποθηκεύουν μικρά δεδομένα στον υπολογιστή του χρήστη, ενώ οι συνεδρίες αποθηκεύουν μεγαλύτερα δεδομένα στον διακομιστή και είναι ασφαλέστερα για ευαίσθητες τιμές.
  • 💨 Δεδομένα Flash: Η set_flashdata() αποθηκεύει ένα μήνυμα που είναι διαθέσιμο μόνο στο επόμενο αίτημα, ιδανικό για εφάπαξ ανατροφοδότηση μετά από μια ανακατεύθυνση.
  • 🔑 Δεδομένα χρήστη: Η συνάρτηση set_userdata() διατηρεί τιμές όπως το όνομα χρήστη και το logged_in για ολόκληρη την περίοδο λειτουργίας και η συνάρτηση unset_userdata() τις διαγράφει κατά την αποσύνδεση.
  • Έλεγχος πρόσβασης: Μια επαναχρησιμοποιήσιμη μέθοδος check_auth() ανακατευθύνει τους επισκέπτες στη σελίδα σύνδεσης κάθε φορά που λείπει το κλειδί περιόδου σύνδεσης loged_in.
  • 🧪 Παράδειγμα εργασίας: Το σεμινάριο περιλαμβάνει διαδρομές καλωδίων, έναν ελεγκτή και προβολές σε στυλ Bulma για την επίδειξη τόσο των ροών flash όσο και των μόνιμων συνεδριών.
  • 🤖 AI Assist: Τα εργαλεία τεχνητής νοημοσύνης μπορούν να υποστηρίξουν ελεγκτές συνεδριών, να δημιουργήσουν χάρτες διαδρομών και να επισημάνουν τον χειρισμό μη ασφαλών συνεδριών πριν από την ανάπτυξη.

CodeΔιαχείριση συνεδρίας ανάφλεξης

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

Αποστολή Flash Μηνυμάτων σε άλλες σελίδες

Κάντε κλικ στο κουμπί ανανέωσης του προγράμματος περιήγησής σας ή πατήστε F5

Τώρα θα λάβετε τα ακόλουθα αποτελέσματα

Αποστολή Flash Μηνυμάτων σε άλλες σελίδες

Αποθήκευση δεδομένων χρήστη σε περιόδους λειτουργίας 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

Θα μεταφερθείτε στην ακόλουθη σελίδα

CodeΠροβολές περιόδου λειτουργίας του Igniter

Κάντε κλικ στο κουμπί Είσοδος

Θα δείτε τα παρακάτω αποτελέσματα

CodeΠροβολές περιόδου λειτουργίας του Igniter

Αφού συνδεθούμε, μπορούμε πλέον να δούμε τα δεδομένα της περιόδου σύνδεσης.

Συχνές Ερωτήσεις

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

Τα Tempdata είναι δεδομένα συνεδρίας με καθορισμένο χρόνο λήξης. Καλείτε την mark_as_temp() ή την set_tempdata() με διάρκεια ζωής σε δευτερόλεπτα, μετά την οποία CodeΤο Igniter αφαιρεί αυτόματα την τιμή, ακόμα κι αν η συνεδρία είναι ακόμα ενεργή.

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

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

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

Συνοψίστε αυτήν την ανάρτηση με: