2011-12-23 17 views
6

मैं CodeIgniter में एक लॉगआउट नियंत्रक है:लॉगआउट CodeIgniter

<?php 

class Logout extends MY_Controller { 

    function index() 
    { 

     $this->session->sess_destroy(); 
     redirect('index.php'); 
    } 
} 

यह मैं लॉग आउट लेकिन जब मैं की तरह "/ साइट/addnewpost", प्रवेश के बाद एक और नियंत्रक, फोन यह सिर्फ मुझ में फिर से लॉग करता है, अगर सैसियन पहले नष्ट नहीं हुआ था। ये क्यों हो रहा है?

+0

पुनर्निर्देशन को हटा दें। एक और स्क्रिप्ट बनाएं जिसमें केवल 'var_dump ($ _ SESSION)' है और यह जांचने के लिए लॉग इन करने के बाद उस स्क्रिप्ट को कॉल करें कि सत्र वास्तव में नष्ट हो गया है – xbonez

+0

आपका लॉगिन हिस्सा क्या है? (जिसमें आप सत्र की जांच करते हैं) – ALH

+0

@xbonez - अगर मैं यहां गलत हूं तो मुझे सही करें, लेकिन मैंने सोचा कि CodeIgniter मूल PHP सत्र का उपयोग नहीं करता है। – Tyil

उत्तर

11

एलेक्स के पालन सुझाव है, लेकिन सीआई कोड का उपयोग कर :)। मेरा मतलब है, प्रत्येक सत्र डेटा को व्यक्तिगत रूप से अनसेट करने का प्रयास करें। मैंने संस्करण 2.0.3 में एक समस्या के बारे में एक बार पढ़ा है, मुझे लगता है, लेकिन मुझे अब याद नहीं है और मेरे पास संदर्भ खोजने के लिए समय नहीं है। यह उनके मंच में है, हालांकि, और सुझाव वही था: प्रत्येक सत्र तत्व को एक-एक करके अनसेट करें।

$this->session->unset_userdata('data_one'); 
$this->session->unset_userdata('data_two'); 
$this->session->unset_userdata('data_three'); 
$this->session->unset_userdata('data_one'); 
$this->session->sess_destroy(); 
redirect('home','refresh'); // <!-- note that 
//you should specify the controller(/method) name here 

आप जरूरत रीडायरेक्ट करने के लिए क्योंकि सीआई के सत्र सिर्फ कुकीज़, नहीं देशी php सत्र सरणी हैं।

एक और बात ... यकीन है कि गलती जो आप कोई बात नहीं में लॉग करता है, तो आप सफलतापूर्वक लॉगआउट या नहीं, अपनी प्रवेश तरीकों में नहीं है!

+0

WOrks आपका धन्यवाद! –

2

इस तरह आइटम स्पष्ट रूप से हटाने के प्रयास:

$this->Session->delete('User'); 
$this->Session->destroy(); 
$this->Cookie->delete("User"); 
$this->Cookie->destroy(); 
$this->Auth->logout(); 
$this->redirect('whereever'); 
1

मेरे समस्या सर्वर साइड पर कैशिंग के साथ करना था। तेज मैं ठीक कर सकता है यह लॉगआउट लिंक करने के लिए यादृच्छिक पाठ जोड़कर था:

<?php 
    $this->load->helper('string'); 
    echo anchor('/home/logout/'.random_string(), 'logout'); 
?> 

घर/लॉगआउट प्रश्न में function index रूप में एक ही कोड है।

जैसा कि आप जानते redirect('/', 'refresh') मेरे लिए काम नहीं किया है, लेकिन मैं फिर से मैं एक त्वरित परीक्षण किया था।

मुझे लगता है कि random_string() विधि को हेडर को आउटपुट करके प्रतिस्थापित किया जा सकता है जो कैश को साफ़ करने के लिए मजबूर करता है। जैसा कि आपने शायद अनुमान लगाया है, मैं अभी भी ऐसा नहीं कर सकता क्योंकि मैं बहुत व्यस्त हूं। शायद बाद में।

1

आप अपने "log_in" को मैन्युअल रूप से सेट करने का प्रयास कर सकते हैं या जिसे आपने सत्र में गलत कहा है। फिर, अन्य सभी सत्र डेटा को नष्ट कर दिया।

$this->session->set_userdata('logged_in', FALSE); 
    $this->session->session_destroy(); 
    redirect('index'); 
0

सबसे पहले हमें सत्र आईडी को अनसेट करने और सत्र को नष्ट करने के सत्र से निपटने के लिए सत्र लाइब्रेरी लोड करना होगा। मैं अपने सत्र को अनसेट करने और लॉगआउट सुरक्षित करने के लिए इस कोड का उपयोग कर रहा हूं।

$this->load->library('session'); 
$this->session->set_userdata('user_id', FALSE); 
$this->session->sess_destroy(); 
$this->load->view('your URL'); 
+0

कृपया कोड-केवल उत्तर पोस्ट न करें। आपने जो कुछ बदल दिया है, यह क्यों काम करता है, आदि के बारे में कुछ स्पष्टीकरण शामिल करें। –