PHP / CodeIgniter - çıkış kullanımı ()

7 Cevap php

Ben giriş gerektiren bir kaç sayfa var, bu nedenle bu sayfalara link tüm kontrolörleri ile başlar

$this->checkSession();
//...rest of the code

CheckSession aksi bir mesaj görüntüleyebilir ve denetleyicisi kod kalanı yürütülmesini durdurmak, hala canlı olduğunu oturumu doğrulamak gerekir:

function checkSession()
{
    if (!$this->session->userdata('is_logged_in'))
    {
        //the session has expired!
        $data['main'] = 'confirmation_message';
        $data['title'] = "Session expired";
        $this->load->vars($data);
        $this->load->view('template');
        exit();
    }
}

. I was expecting these instructions to happen in sequence, but I only get a blank page. How can I make sure exit() gets executed only after all views are loaded?

7 Cevap

Bu durumda çıkış kullanmanız gerektiğini, ne oturumu geçerli değilse yapmanız gereken örnek kullanarak uygulamayı yönlendirmek olduğunu:

redirect('/init/login/','refresh');

Bu durumda, Pedro doğrudur. Onlar sadece onları yönlendirmek kaydedilir değilseniz Public/Admin named base controllers her ayrı korumalı dosyada bu yapmak zorunda sizi durdurmak için kullanabilirsiniz eğer, bu daha da iyidir.

Eğer () Çalışıyorsa için Çıktı kütüphane duracak çıkış kullanırsanız Genellikle, ancak konuşma. Sadece yürütülmesini akım denetleyicisi durdurmak ama kontrolörünün çıkışına izin istiyorsanız tam olarak aynı şekilde geri dönüşü kullanabilirsiniz.

function checkSession()
{
    return (bool) $this->session->userdata('is_logged_in');
}

Sonra sadece:

if(!$this->checkSession())
{
        //the session has expired!
        $data['main'] = 'confirmation_message';
        $data['title'] = "Session expired";
        $this->load->vars($data);
        $this->load->view('template');
        return;
}

Eğer gerçekten vb ayıklama için uygulamanızın yürütme anlık ölüme, hata raporlama, isterseniz exit () sadece hiç kullanılmalıdır

Ben benzer bir sorun vardı. Ben hiçbir giriş nedeniyle kullanıcı durdurmak istedim. Ama onları sadece bir giriş sayfasına yönlendirmek için değil bağlantıların bir listesini sunmak istedim. Ben CI sürümü 1.7.2 ve $ this-> _output () $ this-> ekran> _output () kullanarak ve $ this-> am çıktı-> _display () çözümleri benim için işe yaramadı. Ben $ this-> çıkış> get_output () fonksiyonu kullanarak benim sonuçlar almak ancak vardı.

        $this->load->vars($data);
        $this->load->view('template');
        die($this->output->get_output());

Aslında yeni CI işlevi el çıktı sınıf çağırmak için

$this->display->_output();

ve endişe etmeyin - config şekilde ayarlanır eğer önbelleğini işleyen, içerik de düzgün gzip'li olacak

Ben genellikle ekleyebilir ve giriş işlevlerini yerine giriş mantığı ile genişletilmiş kontrolör, böylece normal bir kontrolör sonra giriş yöntemi otomatik olarak adlandırılır ve orijinal içerik görüntülenir olmayan bir auth ihtiyacı olduğunu biriyse. Eğer yönlendirme olmadan kullanıcı erişimine çalıştı sayfada kalmak (ve sonra tekrar aynı sayfa onu gönderme) istiyorsanız bu iyi bir çözüm

Ben CodeIgniter'ın iş akışı hakkında yeterli bilmiyorum ama bunun yerine onu işlemek için çalışmakla giriş sayfasına yönlendirmek istediğiniz gibi geliyor bana. Anlaşılan, size verilen kodu hiçbiri exit() denir zaman tarayıcıya şablon gönderir.

exit () orada kese keser ve kontrolörün gerçek _output () fonksiyonu asla denir. Ne yapmanız gereken Örneğin kullanıcı giriş ekranı için denetleyicileri birinde eylemi eklemek ve orada yönlendirmek olduğunu. Sen Oturum gelen flashdata işlevini kullanabilirsiniz - http://codeigniter.com/user_guide/libraries/sessions.html mesajınızı geçmek ve daha sonra iç görünüm yakalamak ve bunu göstermek için.

Çok akıllı değil ama çalışması gerekir başka yolu zorla çıkış fonksiyonu çağırmaktır.

function checkSession()
{
    if (!$this->session->userdata('is_logged_in'))
    {
        //the session has expired!
        $data['main'] = 'confirmation_message';
        $data['title'] = "Session expired";
        $this->load->vars($data);
        $this->load->view('template');
        $this->_output();
        exit();
    }
}
$this->output->_display();
exit(); 

Doğru cevap! Sam Sehnert sayesinde ... Bu yorumların içinde gizlenen bu yüzden yeniden sonrası düşündüm.