Olmayan ssl SSL taşırken oturum tasarrufu değil

6 Cevap php

I have a login screen that I force to be ssl, so like this: https://www.foobar.com/login then after they login, they get moved to the homepage: https://www.foobar.com/dashbaord

However, I want to move people off of SSL once logged in (to save CPU), so just after checking that they are in fact logged in on https://www.foobar.com/dashbaord I move them to http://www.foobar.com/dashbaord

Peki sayfa tekrar çalıştığında, onlar (tüm sayfalar gibi) kaydedilir ve aktif mevcut değil gibi görünüyor doğruluyor, çünkü bu her zaman, oturum değişkenleri silip görünüyor, bu nedenle giriş ekranına taşır.

Oddness / bulgular:

  1. Liste öğesi
  2. İkinci giriş her zaman çalışır ve mutlu http://www.foobar.com/dashbaord beni alır
  3. Bu başarılı bir çerez ilk oturumu oluşturur
  4. Ben iki kez giriş, sonra çıkış ve tekrar giriş, iki oturum açma (ben çerez var ki aslında bu takip gibi görünüyorlar) gerekmez. Ben tanımlama bilgisini silerseniz, geri iki oturumları değilim.
  5. İkinci oturum açtıktan sonra, ben ssl olmayan-ssl hareket edebilir ve oturumu devam.
  6. Ilk girişte, non-ssl siteye hareket hala tekrar giriş yapmak için beni zorlar elle ssl siteye geri hareket, tamamen oturumu mendil.
  7. Ilk, üzerinde SSL gibi aynı mekanizmayı kullanarak ikinci oturum

Ne denedim:

  1. Security.level ve session.checkagent için Cake ayarları ile oynamak - hiçbir şey
  2. (Dosya sistemi aksine) pasta mağaza db olarak oturumları olan - bir şey
  3. Bir XP makinede FF, IE, Chrome test.

Bu cookie yaratılıyor ama okumak olmamak ile ilgili bir şey gibi yani ben hissediyorum.

Environment: 1. Debian 2. Apache 2 3. Mysql 4 4. PHP 5 5. CakePHP 6. Sessions are being saved PHP default, as files

6 Cevap

Ben bunu anladım. Kek SSL bağlantıları altında iken otomatik olarak on-the-fly session.cookie_secure ini değeri anahtarlama edildi Yani oluşturulan çerez ikinci sayfa tanımak olmaz güvenli bir çerez oldu.

Çözüm, açıklama / kek / lib / session.php hattı 420 imsi:

ini_set ('session.cookie_secure', 1);

(Ben bültenleri çıkıp çizgi # değişecek eminim gibi sadece onu bulmak için arayın.)

Bu kaçırma kullanıcı oturumunu ortaya koyar ki o korkunç güvensiz (yararlanabilmesi için kolay bir Firesheep bakınız) - Kabul cevabı "bir kez giriş SSL off insan taşımak" için OP'ın arzusunu karşılar iken.

(Bir kullanıcı SSL üzerinden kimlik doğrulaması sonra SSL servis edilecek tüm sayfaları gerektirir) CakePHP varsayılan davranışı ve (şifrelenmemiş tüm doğrulanmış sayfaları hizmet vermektedir ve doğrulanmış çerez ortaya) kabul edilen yanıt arasında daha iyi bir uzlaşma SSL üzerinden şifreli sayfalarını hizmet ise ve kimlik doğrulaması gerektiren yalnızca.

Güvenli hizmet ve kimlik bilgilerini ve güvensiz servis edilen başka tutan biri - bu başarmak kolay bir yolu iki oturum çerezleri korumaktır. Böyle bir çift oturum yaklaşımı desteklemek için basit bir uygulama şöyle session.name geçersiz kılmak için bir session_handler kullanacaktır:

    if (env('HTTPS')) {
        ini_set('session.name', Configure::read('Session.cookie').'-SECURE');
    }else{
        ini_set('session.name', Configure::read('Session.cookie'));
    } 

Eğer kimlik bilgilerini içeren oturum tanımlama göndermek gerekir beri - bu yaklaşım ile akılda tutulması gereken bir öğe doğrudan kimlik doğrulaması gerektiren bir sayfaya SSL olmayan bir sayfadan link açıkça https kullanarak bağlamak için gerekli olacaktır bağlantı şifreli ise tarayıcı sadece bunu yapacağız.

Her şeyden önce, ben ikinci oturum açma (HTTPS üzerinden) ilk olarak aynı mekanizmayı kullandığını doğru anlamak mı?

Bir teminatsız sayfadaki ilk hit oturum sırasında oluşturulan bir ek olarak, yeni bir oturum oluşturmak mı?

Ilk girişte, çerez Secure bayrağı (yani çerez sadece güvenli (HTTPS) bağlantısı üzerinden gönderilmesi gerektiğini anlamına gelir) ile set değil, olmadığını kontrol edin.

(Yerine CakePHP kitaplık dosyasını düzenleyerek daha.) Bir yapılandırma dosyasında kendi oturum yönetimi ayarlarını belirtebilirsiniz sen / kek / lib / oturumda ayardan öncelikli alacak, 0 session.cookie_secure ayarlayabilirsiniz yapılandırma dosyasında. php. Bu oturum tanımlama SSL ve SSL olmayan hem de bağlantıları için kullanılacak olmasını sağlayacaktır.

Here is a blog entry on the topic: http://bakery.cakephp.org/articles/view/how-to-bend-cakephp-s-session-handling-to-your-needs

and some documentation from the Cookbook: http://book.cakephp.org/view/173/Sessions

Ana sayfanız sunucuya bir sonraki istekte üzerinde herhangi bir flaş var mı? Veya herhangi bir içerik Ajax yükleme?

Eğer sunucudan gönderilen başlıklarını kontrol ettiniz mi? IE Fiddler kullanabilir veya Firefox Canlı Başlıkları addon kullanmak. Herhangi bir yeni tanımlama ayarlamak veya CakePHP çerez farklı bir değere sahip olmak için kontrol edin.

You can read more in documentation CakePHP at http://book.cakephp.org/2.0/en/development/sessions.html CakePHP’s defaults to setting session.cookie_secure to true, when your application is on an SSL protocol. If your application serves from both SSL and non-SSL protocols, then you might have problems with sessions being lost. If you need access to the session on both SSL and non-SSL domains you will want to disable this:

Sen açık dosya Yapılandırma / core.php ve feryat olarak eklemek

Configure::write('Session', array(
    'defaults' => 'php',
    'ini' => array(
        'session.cookie_secure' => false
    )
));

Şimdi http ve oturumu kaybetmek değil https geçiş yapabilirsiniz :)