CodeIgniter oturumu sınıf için güvenli zaman aşımı değeri?

3 Cevap php

Ben PHP oturumları işlemek için CodeIgniter'ın oturum sınıfını kullanıyorum. Otomatik olarak siteye her ziyarette oluşturulan oturum değişkenlerinin biri session_id edilir:

Kullanıcının benzersiz Session ID (bu taşınabilirlik için MD5 ile karma çok güçlü entropi ile istatistiksel rasgele dize olduğunu ve her beş dakikada bir) Varsayılan (rejenere)

Sitemde ben kayıtsız kullanıcının izlemek için özelliğe sahip gerekiyor ve ben şu anda bu veritabanındaki bir ZİYARETÇİ tablosunda depolanan id değerine sahip ziyaretçinin session_id karşılaştırarak hayata geçirdik. Bu, session id kez her beş dakikada gerçeği dışında mükemmel çalışıyor. Benim uygulama (naziksiniz kayıt olmadan bir soru veya cevap sonrası ne SO ne gibi) 5 dakika daha uzun bir süre ziyaretçi hatırlamak istiyorum.

Benim soru şudur: sadece (12 saat gibi bir şey) oturum sınıfının rejenerasyon süresinin uzatılması ile herhangi bir güvenlik sorunları görebilirsiniz?

Update: şimdiye kadar gördüğüm cevaplar dayalı, bir güvenlik sorunu daha onun bir performans endişe daha doğrusu gibi görünüyor. Onun yeni bir oturum oluştururken, aynı zamanda sürece oturum olarak devam görünüyor yeni bir çerez oluşturur çünkü CodeIgniter oturum sınıf nasıl çalıştığını biraz garip. Ben sürece ben ona ihtiyaç olarak süren oturum kimliği ile başka bir çerez oluşturmak sanırım. Ben 12 saat gibi bir şey için oturumları kaydetmek için olsaydı ama ne kadar bir performans endişe olurdu? Olur yavaş aşağı şeyler ben bir 12 saatlik süre içinde benzersiz milyonlarca ziyaretçi var (ben endişelenecek büyük sorun olurdu bu durumda ...) sürece?

3 Cevap

Bu fikri ile iki şey:

  • If users go away from their computer (without locking it / closing their browser), someone else might use it to go to your site with their account
    • iyi, muhtemelen senin sorunun değil
    • Bazı giriş / parola alanları varsa, kullanıcıların büyük olasılıkla zaten kendi giriş + şifre zaten tarayıcı tarafından ezberlemiş (well, for the registedred ones, anyway -- and those probably have more "power" than not registered ones)
  • If you have lots of users on your site, you will have more session files
    • oturumları dosyalarında saklanır gibi
    • (Aynı onlar DB / memcached saklanır - daha fazla seans depolamak için yeterli RAM var yani sen memcached yapılandırmış olmanız gerekir bu durumda)

Yani, evet, küçük bir güvenlik riski vardır; ama ben gerçekten ilgili olduğunu sanmıyorum.


Another idea would be to keep a short session lifetime, but to store some informations in cookies, with a lifetime more important than that ?
Enough information, actually, to allow re-creation of a new session, without the user noticing anything ?

Ama, evet, o sizin tarafta biraz daha fazla çalışma gerektirir ...


Düzenlemeden sonra biraz daha doğruluklarını eklemek için:

Its kinda weird how the codeigniter session class works because when creating a new session, it also creates a new cookie which seems to persist as long as the session.

Bu oturumları ile ilgili "standart" bir şekilde - en azından, PHP:

  • Oturumun veri sunucu üzerinde, diskte bir dosyada saklanır
  • ve bir çerez bir kullanıcı arasında bir "bağlantı", ve onun oturumun bilgileri içeren dosya tutmak için kullanılır. Bu çerez olmadan, bu dosyaların biri belirli bir kullanıcının oturumunu içeren bilmenin hiçbir yolu yoktur olacaktır.

But how much of a performance concern would it be if I were to save the sessions for something like 12 hours?

If you're having millions of users on your site, this will means having millions of files, each one containing the session's data of one user -- and it's not good to have too many files.
But is you are having a few hundreds user, that should be allright, I guess.

12 saat boyunca oturumları tasarrufu, sitenizin ziyaretçi miktarına bağlı olarak iyi bir fikir olmayabilir. Neden çerezleri kullanmaz? Bu kullanıcının bu olsa kendi tarayıcınızda etkin olup olmadığını bağlıdır: http://www.php.net/setcookie.

Bir Güvenlik İpucu:

True üzerine bırakın sess_match_useragent(application/config/config.php)