2012-01-26 30 views
8

मैं कोडनिर्देशक में नौसिखिया हूं। मैं व्यवस्थापक के रूप में लॉगिन करने के लिए एक लॉगिन फॉर्म का उपयोग कर रहा हूं। जब व्यवस्थापक सही उपयोगकर्ता नाम और पासवर्ड के साथ लॉग इन करता है/उसे सत्र चर के साथ होम पेज पर निर्देशित किया जाता है। और फिर यदि वह लॉग आउट बटन पर क्लिक करता है तो सत्र को नष्ट किया जाना चाहिए और उपयोगकर्ता को लॉग इन पेज पर रीडायरेक्ट करना होगा यानी फॉर्म पेज में लॉग इन करें।codeigniter sess_destroy() ठीक से काम नहीं कर रहा है, मैं क्या गलत कर रहा हूँ?

<?php 
class Home extends CI_Controller 
{ 
    function __construct() 
    { 
     parent:: __construct(); 
     $this->is_logged_in(); 
    } 
    function is_logged_in() 
    { 
     $is_logged_in = $this -> session -> userdata('is_logged_in'); 
     if (!isset($is_logged_in) || $is_logged_in != true) 
     { 
      $this -> load -> view('admin/forbidden'); 
     } 
    } 
    function admin_home() 
    { 
     $data['main_content'] = 'home_view'; 
     $this->load->view('admin/home_view'); 
    } 
} 

मॉडल admin_model है:

<?php 
class Admin extends CI_Controller 
{ 
    function index() 
    { 
     $data['main_content'] = 'admin/log_in'; 
     $this -> load -> view('includes/admin/admin_template', $data); 
    } 
    function log_in() 
    { 
     $this->load->model('admin_model'); 
     $query = $this -> admin_model -> validate(); 
     if ($query)// if the user's credentials validated... 
     { 
      $data = array('user_name' => $this -> input -> post('user_name'), 'is_logged_in' => true); 
      $this -> session -> set_userdata($data); 
      redirect('admin/home/admin_home'); 
     } else// incorrect username or password 
     { 
      $this -> index(); 
     } 
    } 
    function log_out() 
    { 
     $this->session->sess_destroy(); 
     redirect('/admin/admin','refresh'); 
    } 
} 

दूसरी नियंत्रक घर नियंत्रक है:

1 नियंत्रक व्यवस्थापक है अब

<?php 
class Admin_model extends CI_Model 
{ 
    function __construct() 
    { 
     parent:: __construct(); 
    } 
    function validate() 
    { 
      $this->db->where('user_name',$this->input->post('user_name')); 
      $this->db->where('password', $this->input->post('password')); 
      $query = $this->db->get('user'); 
      if($query->num_rows==1) 
      { 
       return true; 
      } 
    } 
} 

, यह उपयोगकर्ता चाहिए सत्र को लॉगआउट और नष्ट करने के लिए, लेकिन यदि मैं अपने ब्राउज़र के बैक बटन पर क्लिक करता हूं तो मैं पेज वापस प्राप्त कर सकता हूं च होने वाला नहीं था और सत्र नष्ट नहीं हुआ था। कृपया मुझे बताएं कि मैं यहां क्या कर रहा हूं। मैं codeigniter 2.1.0 का उपयोग कर रहा हूँ।

+0

बैक बटन मारने के बाद, क्या आप कैश से एक पृष्ठ पुनर्प्राप्त कर रहे हैं? या यदि आप 'F5' दबाते हैं तो पेज रीलोड करता है और आपको लॉग इन करता है? – Jakub

+0

हाँ, यह फिर से लोड करने के बाद भी मुझे – Shabib

+0

में लॉग इन करता है यदि आप किसी अन्य ब्राउज़र में कोई 'सुरक्षित' पृष्ठ खींचते हैं (कोई सत्र डेटा नहीं) तो क्या आप भी इसमें शामिल होते हैं? – Jakub

उत्तर

10

सभी मुसीबतों से गुजर रही है और विभिन्न स्थानों में खोज करने के बाद मैं अंत में इस सवाल का समस्या का उचित समाधान मिल गया है पहुंचे क्योंकि ब्राउजर कैश किए गए पेज दिखा रहा था। यह वह सत्र नहीं था जो समस्या पैदा कर रहा था और यह ठीक से काम कर रहा था। यहाँ समाधान है: घर नियंत्रक में कैश को साफ़ करने के लिए एक समारोह में शामिल करके और निर्माता समारोह में यह बुला करता है चाल :) यहाँ समाधान के साथ घर नियंत्रक है:

<?php 
class Home extends CI_Controller 
{ 
    function __construct() 
    { 
     parent:: __construct(); 
     $this->is_logged_in(); 
     $this->clear_cache(); 
    } 
    function is_logged_in() 
    { 

     if (!$this->session->userdata('is_logged_in')) 
     { 
      redirect('/admin/admin'); 
     } 
    } 
    function clear_cache() 
    { 
     $this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate, no-transform, max-age=0, post-check=0, pre-check=0"); 
     $this->output->set_header("Pragma: no-cache"); 
    } 
    function admin_home() 
    { 
     $data['main_content'] = 'home_view'; 
     $this->load->view('admin/home_view'); 
    } 
} 

अब धन्यवाद चला जाता है इस लिंक पर "logout feature in code igniter", यहां वह जगह है जहां मुझे समाधान मिला है और यह पूरी तरह से काम करता है :)

4

यदि आप लॉगआउट करते हैं तो सत्र लॉग हो जाता है, सत्र उपयोगकर्ता डेटा वर्तमान सीआई पृष्ठ निर्माण की अवधि के लिए बनी हुई है।

एक एहतियाती उपाय के रूप में आपको क्या करना चाहिए:

function log_out() 
{ 
    $this->session->sess_destroy(); 
    // null the session (just in case): 
    $this->session->set_userdata(array('user_name' => '', 'is_logged_in' => '')); 

    redirect('/admin/admin'); 
} 

देखें: http://codeigniter.com/forums/viewthread/110993/P130/#662369

+0

धन्यवाद, लेकिन यह काम नहीं कर रहा है। मुझे अभी भी एक ही समस्या का सामना करना पड़ रहा है :( – Shabib

+0

कोई कारण है कि आप 'रीफ्रेश' रीडायरेक्ट कर रहे हैं?एक स्थान आधारित एक क्यों न करें 'केवल रीडायरेक्ट करें ('/admin/admin ');' यह समस्या को जिम्मेदार ठहरा सकता है, भले ही अन्य सभी विफल हो जाएं '$-- output-> enable_profiler (TRUE); ' क्या चल रहा है यह देखने के लिए। – Jakub

+0

जहां यह $ यह-> output-> enable_profiler (TRUE) सक्षम करता है ;? – Shabib

संबंधित मुद्दे