Giriş yaptıktan sonra diğer sayfalarda mevcut değil Codeigniter Oturum Verileri

5 Cevap php

Yani, kullanıcının kimlik bilgilerini doğrular bir giriş sayfası kurmak, ve sonra CodeIgniter session data 'e-posta' ve 'is_logged_in' ve birkaç diğer öğeleri ayarlar var. Giriş yaptıktan sonra ilk sayfasında, veri erişilebilir. Bu sayfadan sonra, artık oturum verilerini erişebilirsiniz. Ben o ilk sayfayı yeniden deneyin Aslında, oturum verileri gitti.

Ben şifresiz depolamak, veritabanında depolamak denedim (Biliyorum kötü bir fikir, ama bu sorun giderme için idi), ve şifreli depolama. Ben config.php oturum kütüphane özdevinimli var.

Burada oturum verilerini ayarlamak için kullanıyorum kod bir örnek:

$data = array(
                    'email' => $this->input->post('username'),
                    'is_logged_in' => true 
                );
                $this->session->set_userdata($data);

Ve onu almak için, ben kullanıyorum:

$this->session->userdata('email');

Veya

$this->session->userdata('is_logged_in');

Ben daha önce PHP ve kurabiye ile çok sayıda iş ve oturumları yaptık, ama bu Codeigniter ile ilk projem ve ben şaşkın değilim.

Bu dizin sorunları ile ilgisi olabilir mi? Ben giriş sayfasını ve bir 'login' kontrolör tarafından kontrol süreci var, ve o bir 'site' denetleyiciye yönlendirir.

Yardımlarınız için teşekkürler ve ben bir şey açıklamak gerekir lütfen bana bildirin.

5 Cevap

Sizin kod gayet iyi görünüyor. Bahsettiğin ne benzer bir şey gibi CodeIgniter'ın oturumu kütüphane ile çok sayıda sorunları yaşadım.

Sorunu gidermek için Native Session kütüphanede bakarak düşünün.

Sadece bu nedenle CI oturumları kullanmaya çalışıyor denemek için herkesten bir şey vardır:

Ben aynı soruna bir çözüm için etrafa olmuştur, ve birçok ölü biter sonra, benim config.php yeniden incelenmiştir.

Therein, I noticed that $config['cookie_domain'] wasn’t set properly. Upon setting this (and setting my cookie_prefix to ''), sessions now work correctly.

Çerez doğru çekilmesine için sizin etki ayarlanması gerekmektedir yana, sadece benim oturumu için bir çerez referans bulma ve yeni bir her zaman yapmak değildi.

(Veritabanı oturumları ayarlama bu sergiyi ile son derece yardımcı oldu.)

Herkes bu sorunla karşılaşırsa, config / config.php gidin ve emin olun $config['sess_use_database'] TRUE ayarlanmış olduğundan emin olun. Bu veritabanı, tüm oturum verileri kaydetmek - Benim için çalıştı.

Eğer 'oturum' adında bir tablo yoksa, bu SQL komutunu çalıştırın:

CREATE TABLE  `sessions` (
`session_id` VARCHAR( 40 ) NOT NULL DEFAULT  '0',
 `ip_address` VARCHAR( 16 ) NOT NULL DEFAULT  '0',
 `user_agent` VARCHAR( 120 ) DEFAULT NULL ,
 `last_activity` INT( 10 ) UNSIGNED NOT NULL DEFAULT  '0',
 `user_data` TEXT NOT NULL ,
PRIMARY KEY (  `session_id` ) ,
KEY  `last_activity_idx` (  `last_activity` )
) ENGINE = MYISAM DEFAULT CHARSET = utf8;

Im ayrıca kod ateşleyici yeni. Bir fikir vermek için Cüz. U denetleyicisi session_start () koymak mı? burada örneğidir:

sınıf Cuser Denetleyicisi {uzanır

function Cuser()
{
    parent::Controller();
    session_start();
    $this->load->helper('url');     
}

}

belki ben yanlış ... ama u deneyebilirsiniz ... :)

Cookie adını kontrol etmek zihin. Bunun içinde nokta olamaz.

Kötü çerez:. Domain.com

İyi cookie: domaincom