PHP: oturumları için başparmak-kurallar

8 Cevap php

Ben küçük dosyalara 100files hakkında benim çok karmaşık bir proje, kırmak zorunda kaldı. Bir sorun oturum hataların güzel yığın alma mantığını görmek için hala zor olduğunu:

`Cannot send session cookie - headers already sent by`

Nasıl oturum komutları gibi "session-start" ve "ob-sonu-floş" olarak, yönetirim? Eğer index.php başında ve sonunda onları eklemek veya bunları yönetmek için bazı merkezi dosyası var mı?

, Cevap başına bir başparmak-kural var lütfen.

8 Cevap

Bu sizin için ne soruyorsun, ama sadece küçük bir ipucu olarak olmayabilir:

Ben hep böyle <?php etiketi açık bırakın:

<?php
class foo {
    //...
}

//EOF

Eğer herhangi bir satır sonlarını olamaz bu şekilde ?> aşağı takip etmek çok zor olurdu sonra (oturumundan önce kasıtsız çıkış başladı).

Bu kongre aynı zamanda Zend Framework tarafından kullanılmaktadır.

Herhangi bir çıktı yapar her türlü kod önce session_start () kullanmanız gerekir (dahil, fakat başlıkları, çerezleri gönderme sınırlı değil) yani bir pageload sırasında çalıştırılan ilk dosyanın üst bölümünde güvenli bir yerdir.

Bir custom session handler olarak uygulanan kullanabilirsiniz singleton aramaları session_start başlangıçta yarattığı zaman. Herhangi bir başka oturum işlemleri o oturum nesnesi üzerinde yapılmaktadır.

Çıktı controll sorun indeks yazısının başındaki ob_start arayarak çözülebilir. Çıktı tamponu komut yürütme sonunda otomatik olarak temizlendi gibi ob_end_flush gerekli değildir çağırıyor.

Belki de sadece oturumu herhangi bir çıkıştan önce başlamış olmasını sağlamak için oturum autostart kullanabilirsiniz?

http://us.php.net/manual/en/session.configuration.php#ini.session.auto-start

Ben genellikle index.php başlangıç ​​/ sonunda onları koymak ve sonra () içerik sayfaları içerir. Bu, oturum içerik sonra başlamış ve temizlenmiş olacak garanti gibi sağlam bir çözüm gibi görünüyor.

Tüm bu hata genellikle gelir zaten çıktı bir şey var olmasıdır. Ben her zaman bu var yuvarlak yolu bana her şeyi yapıyor bitti sonra, sadece bir yerde çıkış göndermek için hatırlamanıza yardımcı olacak bazı çiftleşmiş motoru kullanımı idi. I smarty kullanılan, ancak başkalarının yükler var.

  • Use some kind of response object to aggregate your data/headers.

    Bu size aynı anda tüm başlıkları göndermek ve oturumu başlatabilirsiniz emin olmasını sağlar yalnızca gerektiğinde vb

    Pros

    • Tepki kullanılmasını kolaylaştırır.
    • Eğer içeriği toplamak ve müşteri henüz herhangi bir veri almadı beri bir istisna atılır eğer farklı çıktı göndermenizi sağlar

    Cons

    • Siz mümkün olduğunca erken istemci veri parçalarını göndermek mümkün olmayacaktır

Kodunuz iyi organize eğer proje mantıklı iyi organize olmak istiyorsanız, oturum yönetimi kod uzaklaştırmak olması gerekmez .. Aslında, hatta sürecin sonunda neredeyse koyabilirsiniz , bunu daha önce dize her türlü yankı umurumda değil eğer.

Şahsen, seans ve tedavi (yolumu ele alınması php kendim tarafından oluşturulan) gibi farklı kütüphaneleri ob, ve bu iyi sollution olduğunu düşünüyorum tercih ederim. Ama bu size ulaşmak istediğiniz ne deppends.