2011-06-04 17 views
5

में देशी सत्रों के साथ इसेट का उपयोग करना मैंने सीआई को मूल सत्रों से अलग-अलग सत्रों को कैसे संभाला है और कुकी (?) में सभी डेटा संग्रहीत करने के बारे में थोड़ा असुरक्षित महसूस किया है, जो PHP के मूल सत्र के विपरीत है जो केवल सत्र आईडी संग्रहीत करता है (?)। तो मैंने सीआई देशी_शन पुस्तकालय के बिना देशी सत्रों का उपयोग करने का फैसला किया है।कोडइग्निटर

अब, मुझे पता है कि सीआई में इनपुट कक्षा इस तरह एक सही/गलत बयान के साथ isset सत्यापन करती है:

if ($this->input->post('something')) 

जो isset समारोह काम करने में असमर्थ renders (यह एक त्रुटि देता है)। हालांकि, मैं अपने मूल सत्रों को Isset फ़ंक्शन के साथ देखना चाहता हूं, तो मैं यह कैसे कर सकता हूं? मैं

if (isset($_SESSION['keyHere']))

जो मुझे एक त्रुटि देता है की कोशिश की है।

तो योग करने के लिए: मैं अपने सत्र सरणी पर isset उपयोग करना चाहते हैं के रूप में मैं

if ($_SESSION['keyHere'])

का उपयोग कर महसूस isset बिना हो सकता है 'खतरनाक/मूर्ख'।

साथ ही, आखिरी प्रश्न के रूप में, मैं इस बारे में उत्सुक हूं कि आपको कौन सा सत्र संभालना सबसे सुरक्षित है? सीआई का सत्र वर्ग या सर्वर-साइड स्टोरेज इत्यादि के साथ पीएचपी का देशी हैंडलिंग? जब सत्रों की बात आती है तो मुझे जितना संभव हो उतना सुरक्षित महसूस करना होगा, इससे कोई फर्क नहीं पड़ता कि मुझे लंबा कोड लिखना होगा।

उत्तर

1

मैं isset के बजाय array_key_exists का उपयोग करूंगा। isset यह भी जांचता है कि मान शून्य नहीं है, इसलिए मौजूदा कुंजी वाला सरणी है लेकिन शून्य का मान अभी भी झूठा होगा। आप जानते हैं कि यह एक सरणी है और आप यह जांचना चाहते हैं कि कोई कुंजी मौजूद है या नहीं, इसलिए यह array_key_exists का उपयोग करने के लिए सबसे अधिक समझ में आता है।

लेकिन यह समस्या नहीं है। : डी

मुझे लगता है कि आपको पहले session_start() पर कॉल करने की आवश्यकता है।

PHP का मूल सत्र हैंडलिंग तब तक ठीक काम करता है जब तक कि आप एक ही वेबसर्वर पर हों।

0

मैंने हमेशा php functionempty(); का उपयोग किया है, हालांकि यदि आप नहीं जानते कि आप क्या कर रहे हैं तो यह अलग-अलग काम करता है।

  • यदि यह एक खाली सरणी है, यह अवास्तविक लौटाते हैं
  • यदि यह शून्य है, यह वापस आ जाएगी गलत

मैं व्यक्तिगत रूप से नई session class सीआई 2.0.2 के साथ थोड़ा समस्या थी। "सत्र" नामक एक टेबल बनाएं और sess_use_database का उपयोग करके डेटाबेस में सत्रों को संग्रहीत करें। sess_encrypt_cookies को भी सत्य पर सेट करें, और आखिरकार, यदि आप उपयोगकर्ता आईपी के साथ सत्रों को मिलान करना चाहते हैं, तो sess_match_ip का उपयोग करें। ओह, और एन्क्रिप्शन कुंजी सेट करना सुनिश्चित करें, जो इसे और भी सुरक्षित बनाएगा।

PHP सत्र अच्छे हैं, लेकिन मुझे व्यक्तिगत रूप से सीआई सत्र बेहतर पसंद है क्योंकि इससे अधिक लचीलापन मिलता है। खासकर जब आप लोड बैलेंसर के साथ कई वेब हेड चला रहे हैं।

आशा है कि मदद करता है!

0

निर्मित CodeIgniter Session Class का उपयोग क्यों नहीं करें? यह आपको isset() का उपयोग करने के लिए मजबूर नहीं करने के संबंध में इनपुट क्लास के समान कार्यक्षमता प्रदान करेगा।

यह एन्क्रिप्टेड सत्रों की अनुमति देता है और इसके अपने सत्र कार्यान्वयन का उपयोग करता है।

$this->session->userdata("keyHere"); // returns false if not set 
2

ठीक है, तो आप जारी करने के साथ समस्या के बारे में बात करते हैं! मैं सभी उत्तरों के लिए सहमत हूं, खाली फ़ंक्शन array_key_exists का उपयोग करके भी एक अच्छा प्रयास है, लेकिन जारी करने के लिए php भाषा पर अपना स्वयं का स्थान है।

सबसे पहले आपने जो त्रुटि प्राप्त की है उसे पोस्ट नहीं किया है, जैसा कि @GolezTrol ने कहा है कि आपको session_start() के साथ समस्या हो रही है।

आपको इसे किसी भी स्क्रिप्ट से पहले पृष्ठ के शीर्ष पर रखना होगा। मैं इस कोड को सभी स्क्रिप्ट से पहले रखूंगा, और इसकी शुरुआत में इसे कॉन्फ़िगर/config.php पेज के अंदर रखने के लिए सबसे अच्छी जगह, या शायद रूट इंडेक्स.एफपी

इसका उपयोग करके, आप शुरू करेंगे आपके सिस्टम के सभी पृष्ठों पर सत्र। ठीक है, आपके दूसरे प्रश्न के बारे में।

मुझे लगता है कि PHP के मूल निवासी वास्तव में सुरक्षित है, लेकिन कोडिनेटर का सत्र यह वास्तव में भी अच्छा है।

कोडिनेटर को सुरक्षा के साथ कुछ समस्याएं होती हैं, जब हम कुकीज़ के बारे में बात करते हैं, अगर हम सिस्टम के महत्वपूर्ण डेटा के साथ काम कर रहे हैं, तो इसके साथ काम करना मुश्किल है, खासकर अगर कोई इसे संपादित कर सकता है, तो मैं इसके बारे में सोच रहा हूं कि मैं ऊपर वर्णित, मैं कह सकता हूं कि कोडनिर्देशक की अच्छी सत्र पुस्तकालय है, भले ही हम महत्वपूर्ण डेटा के साथ काम कर रहे हों।

यदि आप कुकी की सुरक्षा पर विश्वास नहीं करते हैं, तो बस डेटाबेस पर रखें, और आपको इसके साथ कोई परेशानी होगी। सिस्टम की हर जगह इस कक्षा के साथ काम करने की क्षमता और सुविधा अच्छी बात है!

असल में मैं डेटाबेस के तरीके का उपयोग कर रहा हूं, और मैं इसका सुझाव देता हूं।

0

आपको वास्तव में कोडनिर्देशक सत्र कक्षा का उपयोग करना चाहिए। आप इसे डीबी में सत्र डेटा स्टोर कर सकते हैं ताकि कुकी में केवल एक अद्वितीय पहचानकर्ता हो। आप उस कुकी को कोडनिर्देशक सुरक्षा कुंजी के साथ एन्क्रिप्ट करने के लिए भी सेट कर सकते हैं।

फिर, जब आप सत्र की जानकारी तक पहुंचते हैं, तो यह सामान्य इनपुट विधियों की तरह कार्य करता है और इसलिए आप केवल ($ this-> session-> userdata ('name')) को जारी करने या खाली या जो कुछ भी उपयोग करने के बजाय कर सकते हैं।

1
$data=$this->session->userdata("session variable"); 

if($data) 
{ 
    // do something 
} 

अपनी सीआई कोड फ़ाइलों में इसका उपयोग करें। यह हर समय मेरे लिए काम करता है!

1
$logindata = $this->session->userdata('username'); 

if ($logindata !== FALSE) 
{ 
    //it exists 
} 

मदद कर सकता है!