CodeIgniter में सेशन डेटा के साथ कैसे काम करें
Hindi (हिंदी) translation by Ashish Rampal (you can also view the original English article)
CodeIgniter डेवलपर के रूप में, कोर सेशन लाइब्रेरी के साथ काम करने के तरीके को समझना आपके लिए वास्तव में महत्वपूर्ण है। बेशक, आप हमेशा डिफ़ॉल्ट $_SESSION
सिंटेक्स का उपयोग कर सकते हैं, लेकिन इसकी बजाय हमेशा रैपर का उपयोग करने को रेकमेंड किया जाता है।
सेशन लाइब्रेरी को लोड करने के तरीके से शुरूआत, हम सेशन वेरिएबल को जोड़ने (add), पुनर्प्राप्त करने (retrieve), हटाने (remove) और नष्ट करने (destroy) के बारे में चर्चा में आगे बढ़ेंगे। अंतिम खंड में, हम CodeIgniter ढांचे द्वारा प्रदान किए गए आपके डिस्पोजल में विभिन्न इन-बिल्ट सेशन ड्राइवरों पर एक नज़र डालेंगे।
एक सेशन लाइब्रेरी कैसे लोड करें
यदि आप CodeIgniter में सेशन के साथ काम करना चाहते हैं, तो आपको जिस चीज की आवश्यकता होगी वह एक इन-बिल्ट सेशन लाइब्रेरी है। जब तक कि आप एक वेब एप्लिकेशन डेवेलप नहीं करते हैं, जिसमें सेशन की आवश्यकता नहीं होती है, आपको सेशन लाइब्रेरी के बारे में परेशान नहीं होना चाहिए। हालांकि यह ज्यादातर समय नहीं होता है, आप CodeIgniter में सेशन लाइब्रेरी को स्वत: लोड कर सकते हैं ताकि यह प्रत्येक वेब अनुरोध के लिए सेशन हैंडलिंग फीचर को इनेबल कर सके।
आगे बढ़ें और application/config/autoload.php
पर स्थित फ़ाइल खोलें। निम्नलिखित सेक्शन खोजें।
1 |
/*
|
2 |
| -------------------------------------------------------------------
|
3 |
| Auto-load Libraries
|
4 |
| -------------------------------------------------------------------
|
5 |
| These are the classes located in system/libraries/ or your
|
6 |
| application/libraries/ directory, with the addition of the
|
7 |
| 'database' library, which is somewhat of a special case.
|
8 |
|
|
9 |
| Prototype:
|
10 |
|
|
11 |
| $autoload['libraries'] = array('database', 'email', 'session');
|
12 |
|
|
13 |
| You can also supply an alternative library name to be assigned
|
14 |
| in the controller:
|
15 |
|
|
16 |
| $autoload['libraries'] = array('user_agent' => 'ua');
|
17 |
*/
|
18 |
$autoload['libraries'] = array(); |
$autoload['library']
ऐरे लाइब्रेरीज की सूची रखती है जिन्हें ऑटोलॉड करने की आवश्यकता होती है। हमारी आवश्यकता के अनुसार, आइए इसे इस तरह दिखने दें:
1 |
$autoload['libraries'] = array('session'); |
इसके अलावा, एक और तरीका है जिसे आप हासिल कर सकते थे। सेशन लाइब्रेरी लोड करने के लिए आप अपने कंट्रोलर फ़ाइल में कहीं भी निम्न कोड का उपयोग कर सकते हैं।
1 |
$this->load->library('session'); |
जहां तक सेशन लाइब्रेरी का initialization इनीशिअलिज़शन का संबंध है, उतना ही यह काफी है।
अगले कुछ हिस्सों में, हम कोर ऑपरेशन लाइब्रेरी के साथ अलग-अलग ऑपरेशन्स के माध्यम से जायेंगे। इसे डेमोंस्ट्रेटे करने के लिए, हम एक उदाहरण कंट्रोलर फ़ाइल तैयार करेंगे जो सेशन लाइब्रेरी को लोड करता है और इस आर्टिकल में चर्चा किये जाने वाले मेथड्स को प्रदान करता है।
आगे बढ़ें और निम्न कंटेंट के साथ एक फ़ाइल application/controllers/example.php
बनाएँ।
1 |
<?php
|
2 |
defined('BASEPATH') OR exit('No direct script access allowed'); |
3 |
|
4 |
class Example extends CI_Controller { |
5 |
public function __construct() |
6 |
{
|
7 |
parent::__construct(); |
8 |
|
9 |
// load Session Library
|
10 |
$this->load->library('session'); |
11 |
|
12 |
// load url helper
|
13 |
$this->load->helper('url'); |
14 |
}
|
15 |
|
16 |
public function index() |
17 |
{
|
18 |
/**** SET SESSION DATA ****/
|
19 |
// set single item in session
|
20 |
$this->session->set_userdata('favourite_website', 'https://tutsplus.com'); |
21 |
|
22 |
// set array of items in session
|
23 |
$arraydata = array( |
24 |
'author_name' => 'Sajal Soni', |
25 |
'website' => 'http://code.tutsplus.com', |
26 |
'twitter_id' => '@sajalsoni', |
27 |
'interests' => array('tennis', 'travelling') |
28 |
);
|
29 |
$this->session->set_userdata($arraydata); |
30 |
|
31 |
/**** GET SESSION DATA ****/
|
32 |
// get data from session
|
33 |
echo "Favourite Website: ". $this->session->userdata('favourite_website'); |
34 |
echo "<br>"; |
35 |
echo "Author Name: ". $this->session->userdata('author_name'); |
36 |
echo "<br>"; |
37 |
echo "Interest (Array Example): " . $this->session->userdata('interests')[0]; |
38 |
echo "<br>"; |
39 |
|
40 |
// get e'thing stored in session at once
|
41 |
echo '<pre>'; |
42 |
print_r($this->session->userdata()); |
43 |
|
44 |
/**** REMOVE SESSION DATA ****/
|
45 |
// unset specific key from session
|
46 |
$this->session->unset_userdata('favourite_website'); |
47 |
|
48 |
// unset multiple items at once
|
49 |
$keys = array('twitter_id', 'interests'); |
50 |
$this->session->unset_userdata($keys); |
51 |
|
52 |
echo '<pre>'; |
53 |
print_r($this->session->userdata()); |
54 |
}
|
55 |
|
56 |
public function setflash() |
57 |
{
|
58 |
// set flash data
|
59 |
$this->session->set_flashdata('flash_welcome', 'Hey, welcome to the site!'); |
60 |
|
61 |
// mark existing data as flash data
|
62 |
$this->session->set_userdata('flash_message', 'I am flash message!'); |
63 |
$this->session->mark_as_flash('flash_message'); |
64 |
|
65 |
redirect('example/getflash'); |
66 |
}
|
67 |
|
68 |
public function getflash() |
69 |
{
|
70 |
// get flash data
|
71 |
echo "Flash welcome message: ". $this->session->flashdata('flash_welcome'); |
72 |
echo '<pre>'; |
73 |
print_r($this->session->flashdata()); |
74 |
}
|
75 |
|
76 |
public function tempdata() |
77 |
{
|
78 |
// set temp data
|
79 |
$this->session->set_tempdata('coupon_code', 'XYEceQ!', 300); |
80 |
|
81 |
// mark existing data as temp data
|
82 |
$this->session->set_userdata('coupon_code', 'XYEceQ!'); |
83 |
$this->session->mark_as_temp('coupon_code', 300); |
84 |
|
85 |
// get temp data
|
86 |
echo $this->session->tempdata('coupon_code'); |
87 |
}
|
88 |
|
89 |
public function destroy() |
90 |
{
|
91 |
$this->session->set_userdata('favourite_website', 'http://tutsplus.com'); |
92 |
|
93 |
// destory session
|
94 |
$this->session->sess_destroy(); |
95 |
}
|
96 |
}
|
यह एक बहुत ही बुनियादी कंट्रोलर फ़ाइल है जिसे आपको CodeIgniter डेवलपर के रूप में परिचित होना चाहिए। अब, हम अगले कुछ सेक्शंस में जाने के लिए तैयार हैं जो सेशन हैंडलिंग कॉन्सेप्ट्स में इनसाइट प्रदान करते हैं।
सेशन डेटा को कैसे Add, Retrieve और Remove करें
आरंभ करने के लिए, आइए हमारे __construct
मेथड का कोड प्राप्त करें।
1 |
public function __construct() |
2 |
{
|
3 |
parent::__construct(); |
4 |
|
5 |
// load Session Library
|
6 |
$this->load->library('session'); |
7 |
|
8 |
// load url helper
|
9 |
$this->load->helper('url'); |
10 |
}
|
बस अगर आपने सेशन लाइब्रेरी को ऑटोलॉड नहीं किया है, तो यह पहले स्थान पर करेगा। इसके अलावा, हमने url
हेल्पर भी लोड किया है जो हमें कुछ यूटिलिटी मेथड्स का उपयोग करने की अनुमति देता है जिन्हें हम बाद में देखेंगे।
इसके बाद, index
मेथड के कोड को पकड़ो।
1 |
public function index() |
2 |
{
|
3 |
/**** SET SESSION DATA ****/
|
4 |
// set single item in session
|
5 |
$this->session->set_userdata('favourite_website', 'http://tutsplus.com'); |
6 |
|
7 |
// set array of items in session
|
8 |
$arraydata = array( |
9 |
'author_name' => 'Sajal Soni', |
10 |
'website' => 'http://code.tutsplus.com', |
11 |
'twitter_id' => '@sajalsoni', |
12 |
'interests' => array('tennis', 'travelling') |
13 |
);
|
14 |
$this->session->set_userdata($arraydata); |
15 |
|
16 |
/**** GET SESSION DATA ****/
|
17 |
// get data from session
|
18 |
echo "Favourite Website: ". $this->session->userdata('favourite_website'); |
19 |
echo "<br>"; |
20 |
echo "Author Name: ". $this->session->userdata('author_name'); |
21 |
echo "<br>"; |
22 |
echo "Interest (Array Example): " . $this->session->userdata('interests')[0]; |
23 |
echo "<br>"; |
24 |
|
25 |
// get e'thing stored in session at once
|
26 |
echo '<pre>'; |
27 |
print_r($this->session->userdata()); |
28 |
|
29 |
/**** REMOVE SESSION DATA ****/
|
30 |
// unset specific key from session
|
31 |
$this->session->unset_userdata('favourite_website'); |
32 |
|
33 |
// unset multiple items at once
|
34 |
$keys = array('twitter_id', 'interests'); |
35 |
$this->session->unset_userdata($keys); |
36 |
|
37 |
echo '<pre>'; |
38 |
print_r($this->session->userdata()); |
39 |
}
|
जैसा कि आपने पहले ही सेशन लाइब्रेरी लोड की है, आप सेशन ऑब्जेक्ट तक पहुंचने के लिए $this->session
का उपयोग कर सकते हैं और सपोर्टेड मेथड्स तक पहुंच सकते हैं। set_userdata
मेथड का उपयोग एक नया सेशन वेरिएबल बनाने के लिए किया जाता है, और आम तौर पर इसमें दो आर्गुमेंट -key और value होते हैं।
1 |
$this->session->set_userdata('favourite_website', 'http://tutsplus.com'); |
आप सिंगल कॉल में मल्टीप्ल वेरिएबल बनाने के लिए set_userdata
मेथड का भी उपयोग कर सकते हैं। उस स्थिति में, आपको केवल एक आर्गुमेंट प्रदान करने की आवश्यकता है, और यह नीचे दिखाए गए अनुसार एक array होना चाहिए।
1 |
// set array of items in session
|
2 |
$arraydata = array( |
3 |
'author_name' => 'Sajal Soni', |
4 |
'website' => 'http://code.tutsplus.com', |
5 |
'twitter_id' => '@sajalsoni', |
6 |
'interests' => array('tennis', 'travelling') |
7 |
);
|
8 |
$this->session->set_userdata($arraydata); |
तेज आंख वाले यूज़र्स ने ध्यान दिया होगा कि आप किसी भी सेशन वेरिएबल की वैल्यू के रूप में array को असाइन कर सकते हैं, जैसा कि interests
के उदाहरण में ऊपर दिखाया गया है।
अब, देखते हैं कि किसी सेशन वेरिएबल की वैल्यू को कैसे प्राप्त किया जाए।userdata मेथड का उपयोग किसी भी सेशन वेरिएबल की वैल्यू को रिट्रीव करने के लिए किया जाता है, और आमतौर पर इसे उस सेशन वेरिएबल की key की आवश्यकता होती है जिसे आप पहले आर्गुमेंट के रूप में ढूंढ रहे हैं।
1 |
echo "Favourite Website: ". $this->session->userdata('favourite_website'); |
यदि आप array एंट्रीज में से किसी एक की तलाश में हैं, तो आप निम्न का उपयोग कर सकते हैं:
1 |
echo "Interest (Array Example): " . $this->session->userdata('interests')[0]; |
अधिकांशतः, आप जानना चाहते हैं कि डिबगिंग उद्देश्यों के लिए एक्टिव सेशन में कुल कितने वेरिएबल संग्रहीत किए जाते हैं, और आप इसे भी कर सकते हैं।
1 |
// get e'thing stored in session at once
|
2 |
echo '<pre>'; |
3 |
print_r($this->session->userdata()); |
हां, वही userdata
मेथड हमारे बचाव के लिए आता है! यदि आप userdata
मेथड में कोई आर्गुमेंट नहीं देते हैं, तो यह सभी सेशन वेरिएबल वापस कर देगा।
अंत में, देखते हैं कि आप सेशन से वेरिएबल को कैसे हटा सकते हैं। यह unset_userdata
मेथड है जिसका उपयोग करके आप किसी भी सेशन एंट्रीज को हटा सकते हैं।
1 |
// unset specific key from session
|
2 |
$this->session->unset_userdata('favourite_website'); |
और यहां एक ही मेथड की वेरिएशन है जो दिखाती है कि एक ही बार में मल्टीप्ल एंट्रीज को कैसे हटाया जाए।
1 |
// unset multiple items at once
|
2 |
$keys = array('twitter_id', 'interests'); |
3 |
$this->session->unset_userdata($keys); |
और उसे सेशन से twitter_id
और interests
को हटा देना चाहिए।
आगे बढ़ें और चीजों को एक्शन में देखने के लिए index
मेथड का परीक्षण करें।
उपयोगी Goodies: Flashdata और Tempdata
अंतिम सेक्शन में, हमने CodeIgniter में सेशन हैंडलिंग की मूल बातें पर चर्चा की। इस सेक्शन में, हम सेशन लाइब्रेरी द्वारा प्रदान की गई कुछ अन्य यूटिलिटी मेथड्स पर चर्चा करेंगे।
आपके दैनिक डेवलपमेंट में, आपको अक्सर कुछ यूजर एक्शन के जवाब में मैसेज डिस्प्ले करने की आवश्यकता होती है। उदाहरण के तौर पर, जब कोई आपकी साइट पर कोई कमेंट पोस्ट करता है तो आप एक सफल मैसेज डिस्प्ले करना चाहते हैं, और मैसेज केवल एक बार प्रदर्शित होना चाहिए। set_flashdata
मेथड इस तरह के उपयोग के मामले के लिए एक आदर्श उम्मीदवार है।
वास्तव में, set_flashdata
set_userdata
मेथड के समान है जिसमें यह आपको सेशन में एक वैल्यू को सेव करने की अनुमति देता है। एकमात्र अपवाद यह है कि flashdata
मेथड द्वारा निर्धारित सेशन वैल्यू केवल अगली रिक्वेस्ट के लिए उपलब्ध है। बाद की रिक्वेस्ट्स में, आप इन वेरिएबल्स को अब तक साफ़ करने में इनेबल नहीं होंगे क्योंकि उन्हें साफ़ किया गया था।
setflash
मेथड के कोड को पकड़ो।
1 |
public function setflash() |
2 |
{
|
3 |
// set flash data
|
4 |
$this->session->set_flashdata('flash_welcome', 'Hey, welcome to the site!'); |
5 |
|
6 |
// mark existing data as flash data
|
7 |
$this->session->set_userdata('flash_message', 'I am flash message!'); |
8 |
$this->session->mark_as_flash('flash_message'); |
9 |
|
10 |
redirect('example/getflash'); |
11 |
}
|
आप एक नया flashdata
वैरिएबल बना सकते हैं उसी तरह से आप set_userdata
मेथड का उपयोग करके नियमित सेशन वेरिएबल बनाते। दूसरी ओर, आप एक मौजूदा सेशन वेरिएबल को flashdata
वेरिएबल के रूप में भी चिह्नित कर सकते हैं। उस स्थिति में, आपको उपरोक्त कोड में दिखाए गए अनुसार mark_as_flash
मेथड का उपयोग करने की आवश्यकता है।
अंत में, हम यूज़र्स को getflash
मेथड पर रीडायरेक्ट करते हैं जो दिखाता है कि setflash
मेथड में सेट किए गए flashdata वेरिएबल का उपयोग कैसे करें। आइए getflash
मेथड पर एक त्वरित नज़र डालें।
1 |
public function getflash() |
2 |
{
|
3 |
// get flash data
|
4 |
echo "Flash welcome message: ". $this->session->flashdata('flash_welcome'); |
5 |
echo '<pre>'; |
6 |
print_r($this->session->flashdata()); |
7 |
}
|
जैसा कि अपेक्षित है, वहां एक flashdata
मेथड है जो आपको flashdata के रूप में संग्रहीत सेशन वेरिएबल लाने की अनुमति देती है। यदि आप किसी भी आर्गुमेंट के बिना flashdata
मेथड को कॉल करते हैं, तो यह userdata
मेथड के समान सभी flashdata वेरिएबल वापस कर देगा।
आगे बढ़ें और setflash
मेथड का परीक्षण करें। आपको getflash URL पर रीडायरेक्ट कर दिया जाएगा, और आपको मैसेज दिखाई देगा। अगर आप getflash पेज रीफ्रेश करते हैं, तो आपको वह मैसेज फिर से दिखाई नहीं देगा!
इसके बाद, इस केटेगरी में सेशन लाइब्रेरी द्वारा प्रदान की गई एक और भिन्नता है- tempdata सेशन वेरिएबल। यदि आप किसी स्पेसिफिक टाइम के लिए सेशन वेरिएबल बनाना चाहते हैं, तो set_tempdata
मेथड वह है जिसे आप ढूंढ रहे हैं।
उदाहरण के लिए, यदि आप एक सेशन वेरिएबल बनाना चाहते हैं जिसे किसी निश्चित टाइम के बाद आटोमेटिक रूप से हटा दिया जाना चाहिए, तो आप निम्न मेथड में दिखाए गए अनुसार एक वेरिएबल बनाने के लिए set_tempdata
मेथड का उपयोग कर सकते हैं।
1 |
public function tempdata() |
2 |
{
|
3 |
// set temp data
|
4 |
$this->session->set_tempdata('coupon_code', 'XYEceQ!', 300); |
5 |
|
6 |
// mark existing data as temp data
|
7 |
$this->session->set_userdata('coupon_code', 'XYEceQ!'); |
8 |
$this->session->mark_as_temp('coupon_code', 300); |
9 |
|
10 |
// get temp data
|
11 |
echo $this->session->tempdata('coupon_code'); |
12 |
}
|
set_tempdata
मेथड में तीसरा आर्गुमेंट सेकंड की संख्या इंगित करता है जिसके बाद सेशन से वेरिएबल को हटा दिया जाएगा।
आप mark_as_temp
मेथड का उपयोग कर tempdata की तरह मौजूदा सेशन वेरिएबल को मार्क भी कर सकते हैं बशर्ते कि आपने set_userdata
मेथड का उपयोग कर पहले से ही एक सेशन वेरिएबल बनाया है।
अंत में, आप किसी tempdata
वेरिएबल की वैल्यू लाने के लिए tempdata मेथड का उपयोग कर सकते हैं।
इसलिए अपने दिन-प्रति-दिन डेवलपमेंट लाइफ साइकिल में इस तरह के यूटिलिटी मेथड्स को अपने डिस्पोजल में रखना अच्छा होता है!
आपको क्या नहीं भूलना चाहिए: Session Destroy
सेशन को डिस्ट्रॉय करना शायद आखिरी चीज है जिसे आप यूजर लॉग आउट करते समय करना चाहते हैं। यह सुनिश्चित करता है कि एक्टिव सेशन से अब तक सेट किए गए सेशन वेरिएबल हटा दिए गए हैं और बाद की रिक्वेस्ट्स के लिए अब उपलब्ध नहीं हैं।
आइए destroy
मेथड के कोड को खींचें और इसके माध्यम से जाएं।
1 |
public function destroy() |
2 |
{
|
3 |
$this->session->set_userdata('favourite_website', 'http://tutsplus.com'); |
4 |
|
5 |
// destroy session
|
6 |
$this->session->sess_destroy(); |
7 |
}
|
यह sess_destroy
मेथड है जो हमें एक्टिव सेशन को डिस्ट्रॉय करने में मदद करती है। बेशक, यह एक्टिव सेशन में सेट किए गए tempdata और flashdata वेरिएबल को भी हटा देगा।
सुनिश्चित करें कि आप करंट यूजर के संदर्भ में अब इसके उपयोगी न रहने के बाद सेशन को नष्ट करने की आदत डालें।
शीर्ष पर चेरी: सेशन ड्राइवर्स
हम इस आर्टिकल के अंतिम सेक्शन में हैं-सेशन ड्राइवर। अधिकतर बार, आप अपने एप्लिकेशन में सेशन ड्राइवर को डिफ़ॉल्ट सेशन ड्राइवर के रूप में कॉन्फ़िगर करने के बारे में परेशान नहीं होते हैं, फ़ाइल सिस्टम, पहले से ही डिफ़ॉल्ट सेटअप के साथ कॉन्फ़िगर किया गया है।
तो यह फ़ाइल सिस्टम है जिसमें सारा सेशन-संबंधित डेटा होता हैं, और इसका व्यापक रूप से उपयोग किया जाता है और सेशन हैंडलिंग के लिए स्वीकार्य मानक है। ऐसा कहकर, CodeIgniter अन्य सेशन ड्राइवरों का भी समर्थन करता है जिनका उपयोग आप डिफ़ॉल्ट फ़ाइल सिस्टम सेशन ड्राइवर से स्विच करना चाहते हैं।
CodeIgniter में सभी सपोर्टेड सेशन ड्राइवरों की एक सूची यहां दी गई है:
- Files
- Database
- Redis
- Memcached
डेटाबेस सेशन ड्राइवर, जैसा कि नाम बताता है, उस डेटाबेस में सेशन डेटा संग्रहीत करता है जिसे आपने अपने CodeIgniter एप्लिकेशन के लिए कॉन्फ़िगर किया है।
दूसरी तरफ, अन्य दो सेशन ड्राइवर हाई-परफॉरमेंस वाली वेबसाइटों के लिए पसंदीदा मेमोरी स्टोरेज तंत्र हैं।
application/config/config.php
फ़ाइल में, आप सेशन ड्राइवर को कॉन्फ़िगर कर सकते हैं जिसे आप अपने एप्लिकेशन में उपयोग करना चाहते हैं।
1 |
$config['sess_driver'] = 'database'; |
2 |
$config['sess_save_path'] = 'custom_sessions'; |
यह डेटाबेस सेशन ड्राइवर का उपयोग करने के लिए CodeIgniter को बताता है, और सेशन डेटा custom_sessions
MySQL टेबल में सेव किया जाएगा।
प्रत्येक सेशन ड्राइवर की चर्चा इस आर्टिकल के दायरे से बाहर है, लेकिन आप आधिकारिक साइट डॉक्यूमेंटेशन के माध्यम से जा सकते हैं जो प्रत्येक ड्राइवर के लिए गहन गाइड प्रदान करता है।
निष्कर्ष
CodeIgniter में सेशन हैंडलिंग आज के ट्यूटोरियल का विषय था, और हमने इस विषय के हर पहलू को देखकर पूरी तरह से चर्चा की।
बुनियादी सेशन संचालन के साथ, हम उन कूल flashdata और tempdata मेथड्स के माध्यम से भी गए, और यह सेशन ड्राइवर्स के बारे में चर्चा थी जो हमारे आर्टिकल का निष्कर्ष है।
हमेशा की तरह, आप नीचे दिए गए फ़ीड का उपयोग करके अपने प्रश्नों और सुझावों को दे सकते हैं!