Nasıl CodeIgniter çerez geçerli oturum verilerini tutan biliyor?

5 Cevap php

CodeIgniter'daki, oturum verileri varsayılan bir tanımlama kaydedilir. Ama aynı zamanda (çerez) veri geçerlidir, ya da ben yanlış olduğumu doğrulamak için (oturum kimliği olarak adlandırılır) benim sunucuda bir dosya olmalı?

Ben oturumları kaydedilir konumu arıyorum. CodeIgniter oturumları değil zaten "session.save_path" dizini (/ var/lib/php5) baktım, ama bu dizinde yalnızca diğer oturumları vardır, ama.

Ben de veritabanında oturumlarını kaydetme değilim, bu yüzden nasıl CodeIgniter (çerez) veri geçerli olduğunu biliyor?

5 Cevap

CodeIgniter kurulumu normal PHP oturum yönetimini geçersiz kılar ve normal bir yerlerde bulmak mümkün değildir nedenidir veri işleme kendi sistemini kullanır. (Ayrıca ben şahsen oturum veri TÜM kullanıcıların tarayıcı oturum tanımlama doğrudan saklanır çünkü biraz güvensiz uygulanmaktadır yol bulmak söz ediyorum.)

Fuel önerdi ve CodeIgniter oturum kütüphane aracılığıyla sarfınazar ve depolanan nerede bulmak gibi yapabileceğiniz, ya da OB_Session gibi bir şey ile ele oturumu geçersiz kılabilirsiniz. (http://bleakview.orgfree.com/obsession/)

Ben çok daha sonra doğal PHP oturum yönetimini kullanacak ve A) duyarlı kullanıcıya çok büyük oluyor ve tarayıcı bayt sınırını karşı çökmesini veya B) izin ya çerezlerinizi tutacak beri OB_Session ya da bunun gibi bir şey ya da yüklemenizi öneririm veri istemci tarafında saklanır.

Son olarak, ben CI kullanım kılavuzu talimatlarını takip ve veritabanı oturum verilerini saklamak istiyorsunuz yapmaya çalıştığınız ne bağlı. (http://codeigniter.com/user_guide/libraries/sessions.html) Bu çok daha kolay veri ile çalışmak ve hatta güncellemek ve Codeigniter tarafından saklanır ne uzatmak için yapmak istiyorum. O Eğer veritabanında saklamak bile HALA veritabanına değişti bile çerez hala tüm verileri tutan beri OB_Session gibi bir şey değiştirmek zorunda olsa unutmayın.

Çerez, oturumu veri ve veri yükleme de doğrulandı çerez şifreleme anahtarının bir md5 özetini içeren sistem / kütüphaneleri / session.php, fonksiyon sess_read () hatları 140ff bkz:

// Decrypt the cookie data
if ($this->sess_encrypt_cookie == TRUE)
{
   $session = $this->CI->encrypt->decode($session);
}
else
{
   // encryption was not used, so we need to check the md5 hash
   $hash  = substr($session, strlen($session)-32); // get last 32 chars
   $session = substr($session, 0, strlen($session)-32);
   // Does the md5 hash match?  This is to prevent manipulation of session data in userspace
   if ($hash !==  md5($session.$this->encryption_key))
   {
       log_message('error', 'The session cookie data did not match what was expected. This could be a possible hacking attempt.');
       $this->sess_destroy();
       return FALSE;
   }
}

Bu doğrudan soruya cevap vermiyor, ama bilmek yararlı olabileceğini düşündüm.

PHP oturumu görmek için aşağıdaki kullanın.

print_r ($_SESSION);

CI oturumu görmek için aşağıdaki kullanın.

print_r ($this->session->userdata);

Sadece Firebug ile bugün test ..

Biri ayarlarsa, CodeIgniter'ın "application / config / config.php" dosyasında, Shanee cevabı takip etmek için:

$config['sess_use_database'] = TRUE;

sonra sadece varsayılan CI oturum verisi: session_id, IP_adresi .., tarayıcı çerez olarak saklanır.

Kullanıcı adları ve şifreler gibi set_userdata() fonksiyonu, tarafından sağlanan tüm ek özel veri çerez artık parçası vardır ama yerine veritabanında saklanır.

Aşağıda "oturumlar" dediğimde, PHP oturumlar, CI Sessions değil demek.

Eğer (manuel hassas veriler için kullanılmamalıdır) diyor varsayılan seçeneği kullanırsanız o zaman sorunuzun cevabı bilmiyor olmasıdır. Bu tanımlama güvenir.

Tasarlanmış, güvenli bir şekilde kullanmak için, veritabanı oturum seçeneği yanı sıra, şifreleme seçeneğini kullanmak gerekir. Bu seçeneklerin her ikisi de kullanarak bu sorunun cevabı:

Sadece bir değer çerez saklanır. Bu değerin bir tefrika ve şifreli bir dizidir. Bu dizi dört bilgi parçaları içerir.

  • 'Session_id' => rastgele kıyım
  • 'Ip_address' => 'dizesi - kullanıcının IP adresi'
  • 'User_agent' => 'dizesi - user agent verileri'
  • 'Last_activity' => damgası

Oturum kimliği rastgele bir dizedir. Bu oturum tablosundaki veri ile ilişkilendirmek için kullanılan dizisidir. Dize rejenere (yeniden şifreli) her istek ve çerez ve tabloda güncellenir. Bu oturum tablosu değerini uymuyorsa, tablo verileri erişilemez ve yerleşik çöp toplama yakalanmış olacak.

İsterseniz, ayrıca IP CI oturumu sınıfta kontrol zorlayabilir. Bu rastgele bir rejenerasyon oturum kimliği yanı sıra, kullanıcıların IP de tutarlı kalmalıdır veya oturumu yok olacağı anlamına gelir.

İsteğe bağlı olarak, UA denetimi, ve bir zaman aşımı değerini zorlayabilir.

Bu nedenle, geleneksel oturumu dosya önbellek klasöründe yazılı asla. CI Cookie oturumları böyle bir web arayüzü UI durumlarını hatırlamak gibi tüm ama kişisel olmayan veriler için değersizdir. CI Veritabanı oturumları çok esnektir. PHP kurulumunu Mcrypt içeriyorsa, güvenlik de sağlamdır. Eğer Mcrypt yoksa, hala oldukça güvenli, ancak, örneğin, toplanma PCI uyumu geçmek olmaz.

Sen CI manual daha fazla okuyabilir, ama bu senin sorunun en alakalı düşünülen bilgi bir özet oldu.