कोडइग्निटर में उदाहरण के साथ सत्र कैसे सेट करें
कोडइग्निटर सत्र प्रबंधन
यदि आपने पहले डेस्कटॉप एप्लिकेशन विकसित किए हैं, तो आप शायद जानते हैं कि आप एक वैश्विक चर को परिभाषित कर सकते हैं, इसे एक मान असाइन कर सकते हैं और इसे एप्लिकेशन के जीवन चक्र में एक से अधिक (1) खोलने और बंद करने के लिए उपयोग कर सकते हैं और प्रत्येक अनुरोध में वैश्विक चर तक पहुंच होगी।
दूसरे शब्दों में, एप्लीकेशन की स्थिति को बनाए रखा जाता है। इसका मतलब यह है कि अगर आपने लॉग इन करते समय कंपनी का नाम ग्लोबल वैरिएबल पर सेट किया है, तो लॉग इन फॉर्म को बंद करने के बाद भी कंपनी के नाम की वह स्थिति सुरक्षित रहती है।
HTTP ऊपर बताए गए परिदृश्य से थोड़ा अलग तरीके से काम करता है। यह स्टेटलेस है। यानी आप एक अनुरोध में जो कुछ भी करते हैं, वह अगले अनुरोध में बरकरार नहीं रहता।
इस समस्या के आसपास काम करें। हमारे पास PHP में दो (2) समाधान हैं। हम या तो कुकीज़ के साथ काम कर सकते हैं जो उपयोगकर्ता के कंप्यूटर पर रखी गई छोटी फ़ाइलें हैं या सत्रों के साथ काम करते हैं जो कुकीज़ के समान हैं लेकिन सर्वर पर संग्रहीत हैं और कुकीज़ की तुलना में बड़ी क्षमता रखते हैं।
सत्र का उपयोग कब करें?
सत्र आमतौर पर तब उपयोगी होते हैं जब आप पेज से पेज तक उपयोगकर्ता की गतिविधियों को जानना चाहते हैं। उदाहरण के लिए, मान लें कि आपके पास वेबसाइट पर एक संरक्षित क्षेत्र है। उपयोगकर्ताओं को प्रत्येक पृष्ठ पर लॉगिन करने की आवश्यकता नहीं है। आप उपयोगकर्ता को एक बार लॉगिन करने दे सकते हैं और सत्र चर में उनके विवरण संग्रहीत कर सकते हैं और फिर आगे के अनुरोधों पर उसी डेटा का पुन: उपयोग कर सकते हैं। अन्य उपयोग के मामलों में शॉपिंग सिस्टम पर काम करना शामिल है और उपयोगकर्ता को शॉपिंग कार्ट में आइटम जोड़ना होता है।
वैकल्पिक रूप से, CodeIgniter अगले अनुरोध पर केवल एक बार डेटा उपलब्ध कराने के लिए सत्रों का भी उपयोग करता है। यह उपयोगी है यदि आप डेटाबेस रिकॉर्ड को संपादित और अपडेट कर रहे हैं, और आप उपयोगकर्ता को कुछ फ़ीडबैक वापस करना चाहते हैं जब उन्हें किसी अन्य पृष्ठ पर रीडायरेक्ट किया जाता है।
CI सत्रों के साथ अन्य पृष्ठों पर फ़्लैश संदेश भेजना
इस अनुभाग में, आप सत्र लाइब्रेरी का उपयोग करके अन्य पृष्ठों पर फ़्लैश संदेश भेजने के बारे में जानेंगे। 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 extends CI_Controller {…} SessionController वर्ग को परिभाषित करता है और पैरेंट नियंत्रक वर्ग को विस्तारित करता है।
- public function __construct() {…} कंस्ट्रक्टर विधि को परिभाषित करता है जो पैरेंट क्लास को आरंभ करता है, और URL हेल्पर और सत्र लाइब्रेरी को लोड करता है।
- सार्वजनिक फ़ंक्शन इंडेक्स() {…} सत्र इंडेक्स विधि को परिभाषित करता है जो सत्र इंडेक्स दृश्य को लोड करता है।
- सार्वजनिक फ़ंक्शन flash_message(){…} फ़्लैश संदेश विधि को परिभाषित करता है जो फ़्लैश डेटा सेट करता है और फिर flash_index रूट पर रीडायरेक्ट करता है
आइए अब वह दृश्य बनाएं जो सत्र डेटा का मान प्रदर्शित करेगा।
एप्लिकेशन/व्यूज़ में एक नया निर्देशिका सत्र बनाएँ
application/views/sessions में एक नई फ़ाइल index.php बनाएँ
निम्नलिखित कोड जोड़ें
<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 कुंजी के साथ सत्र डेटा का मान प्राप्त करता है और इसे ब्राउज़र में प्रदर्शित करता है।
आइए अब अपने सत्र फ़्लैश विधि के लिए रूट बनाएं
application/config/routes.php खोलें
निम्नलिखित पंक्तियाँ जोड़ें
$route['flash_index'] = 'session controller'; $route['flash_message'] = 'session controller/flash_message';
चलिए अब इसके लिए अंतर्निहित सर्वर प्रारंभ करते हैं PHP और हमारे फ़्लैश संदेशों का परीक्षण करें
टर्मिनल खोलें
निम्न आदेश चलाएँ
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 खोलें
निम्नलिखित मार्ग जोड़ें
$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 को अपडेट करते हैं
application/controllers/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 dashboard() {…} $this->check_auth('dashboard') को कॉल करने के बाद डैशबोर्ड पृष्ठ को लोड करता है; जो सत्यापित करता है कि logged_in सत्र कुंजी सेट है।
- सार्वजनिक फ़ंक्शन सेटिंग्स() {…} सेटिंग्स पृष्ठ को लोड करता है जो सुरक्षित भी है
- पब्लिक फंक्शन लॉगआउट() {…} सेशन डेटा को नष्ट कर देता है और यूजर को साइन आउट कर देता है। यह विधि लॉगिन पेज पर भी रीडायरेक्ट करती है
कोडइग्निटर सत्र दृश्य
application/views/sessions में निम्नलिखित दृश्य बनाएं
- डैशबोर्ड.php
- लॉगिन.php
- settings.php
डैशबोर्ड.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
आपको निम्नलिखित पृष्ठ पर पुनः निर्देशित किया जाएगा
लॉगिन बटन पर क्लिक करें
आपको निम्नलिखित परिणाम दिखाई देंगे
लॉग इन करने के बाद, अब हम सत्र डेटा देख पा रहे हैं।
सारांश
इस ट्यूटोरियल में, आपने कोडइग्निटर सत्र लाइब्रेरी की मूल बातें सीखी हैं और सीखा है कि इसका उपयोग अस्थायी डेटा को फ्लैश संदेशों के रूप में संग्रहीत करने के लिए कैसे किया जाए और अधिक स्थायी डेटा, यानी उपयोगकर्ता लॉगिन डेटा को कैसे संग्रहीत किया जाए।