Πώς να ορίσετε τη συνεδρία στο 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

Αποστολή 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'));
    }

ΕΔΩ,

  • δημόσια συνάρτηση 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

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

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

Προβολές συνεδρίας CodeIgniter

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

Σύνοψη

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