"Oturumu zaten başlamıştır ..."

9 Cevap php

Zend Framework uygulama yüklemeye çalışırken bu hatayı alıyorum:

Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'session has already been started by session.auto-start or session_start()' in /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Session.php:462

Iz Stack:

#0 /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Session/Namespace.php(143): Zend_Session::start(true)

#1 /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Auth/Storage/Session.php(87): Zend_Session_Namespace->__construct('Zend_Auth')

#2 /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Auth.php(91): Zend_Auth_Storage_Session->__construct()

#3 /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Auth.php(141): Zend_Auth->getStorage()

#4 /www/htdocs/w00a1ed7/autospin/redaktion/application/layouts/scripts/layout.phtml(31): Zend_Auth->hasIdentity()

#5 /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/View.php(108): include('/www/htdocs/w00...')

#6 /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/View/Abstract.php(831): Zend_View->_run('/www/htdocs/w00...')

#7 /www/htdocs/w00a1ed in /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Session.php on line 462

I Zend_Auth ve benim yerel sunucu üzerinde kullanın ve her zaman değil iyi çalışıyor, ama bir üretim sunucusuna ben önceki hata olsun, ama.

I session.autostart .htaccess dosyasındaki 0 olarak ayarlanmış olduğunu kontrol ettirin.

Ben bu hata nasıl düzeltebilirim?


Cevabınız için teşekkür ederim, ama ben her yerde) (kullanıcı session_start yok. ZF ile sadece çalışır.

Benim yerel sunucu komut dosyası mükemmel çalışıyor ben, sadece paylaşılan bir sunucuda bu sorun var.

Bu kod ile INIT işlevini kullanın:

protected $ user;

public function init()
{   
    if(!Zend_Auth::getInstance()->hasIdentity())
    {
        $this->_redirect('auth/login');
    }else
    {
        $this->user = Zend_Auth::getInstance()->getIdentity();
    }
}

Diğer eylemler Yet chack var ... ama hala sorun yok ki ben allready, sadece indexAction tis kodunu ayarlamak için deneyin.

Orada ist böyle oturumda veya somethink hakkında kontrol yok bir Eylem ayarlamak için bir yolu var mı?

Beste saygılarımla

9 Cevap

Ne o ne diyor. Zend_Session::start() henüz çağrılmadı beri Zend_Auth, yeni bir oturum başlatmak için çalışır.

Sorun Zend_Session::start() bir oturumu başlamadan önce çağrılacak olmasıdır. Ancak, session.autostart olduğundan 0, muhtemelen session_start(); yere yazdım (btw bu php.ini .htaccess değil ise). ZF oturumları üzerinde tam kontrol sahibi olmak isteyen beri doğrudan global oturum değişkeni erişmesi gerekir, yani, bunu yapmak için izin değiliz.

Bunu çözmek için, ya session_start() için kod dosyaları arama ve

  1. tüm tekrarlarını ama kaldırmaktır. Fark zaten başlamış eğer, set error_reporting(E_ALL|E_STRICT);
  2. tüm yerlerde Zend_Session::start(); ile değiştirin

Eğer tüm tekrarlamalarını bulamazsanız, bir session_start () bulmak; sizin Zend_Auth::getInstance()->hasIdentity() rahatsız ve aşağıdaki kod ile hızlı n 'kirli sorunu çözmek

try {
    Zend_Session::start();
} catch(Zend_Session_Exception $e) {
    session_start();
}

Size bütün uygulama ZF kullanıyorsanız, ben) 2 ile gitmek istiyorum

Bu deli sürücüler önce, kodu ile yanlış bir şey muhtemelen var!

Check your application.ini for the session save path, for me it is APPLICATION_PATH '/session'

Now check you have the correct permissions! If not then cd into the application folder and type

sudo chmod 777 session
sudo chown -R [usernamehere] session
sudo chgrp -R [usernamehere] session

İş Bitti!

Eğer RPCL kütüphane uygulamaları geliştirme (RADPHP) ve bu hatayı alıyorsanız:

Uygulama mesajıyla bir istisna sınıfı Zend_Session_Exception 'oturumu zaten) (session.auto-başlangıç ​​veya session_start tarafından başlatılmış olan' kaldırdı

o zaman burada benim çözümdür.

Bunu ne kadar basit şaşıracaksınız. Basit satırı dahil

require_once ("zcommon.inc.php");

ZAuth bileşeni içeren dosyasında açılış PHP etiketi hemen sonra - genellikle bu bir DataModule formu ile dosyasıdır. Tabii ki dosya zcommon.inc.php yolunda olduğundan emin olun. Bu Zend oturum yerine RPCL Oturumun ilk başlayacak sağlayacaktır.

Ayrıca uygulama php dosyaların adını içeren sınıfların adına uyduğundan emin olun.

Durumunda herhangi bir kullanım bu, benim application / config / application.ini gelen oturum ilgili satırları alarak bu hata temizlenir

;resources.session.save_path = APPLICATION_PATH "/../data/session"
;resources.session.use_only_cookies = true
;resources.session.remember_me_seconds = 3600

Sorunun nedeni haline fikir için chelmertz teşekkürler.

aynı hata vardı. aynı seansta iki örneği (örn. iki tarayıcı örneği aynı anda yerleştirir) aynı anda kullanılan yalnızca oluştu. Bu php aynı anda aynı kimliğe sahip iki açık oturumları idare edememek değil bir sonucudur.

I Issues with PHP 5.3 and sessions folder veya http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu-session-phpini-garbage burada çözülen, çöp toplama sorununa dikkat çekmek istiyorum.

'Oturumu zaten başlatılmış' sabitleme sonra GC hata ile karşılaştı. Ben GC hata en azından bazı durumlarda oturumu hata için kök neden olabileceğini sanıyorum. Şimdiye kadar iyice araştırmak için yeterli zaman vardı, ama GC ve aktif böcek de sizin durumda ilişkin ise yorum lütfen değil.

Ben aynı durum sonucu olmasına rağmen, benim hata tamamen farklı bir şey neden olduğu serbest kadar aynı sorun ve ben bir cevap bulamadım, bu da dahil olmak üzere tüm mesajların aracılığıyla arıyor vardı.

Aslında autoloading ile bir sorunu vardı. Çünkü Bootstrap sırasında sorun bu (gerçek hatayı gizleme) gösterilmesini yukarıdaki duruma neden oldu inanıyorum.

Yani diğer olası düzeltmeleri geçti bile, Bootstrap ayrıntıları yorumlama denemek ve bu sorunun geçmiş seni alırsa bakın. Açıkçası yavaş yavaş gerçek sorunu ortaya çıkarmak için bootstrap farklı bölümlerini geri getirmek.

Başka bir sunucudan hareket eden kişiler için. Başka bir sorun apache altında çalışır kullanıcı olabilir. Ben yeni bir set oldu benim eski kutu üzerinde farklı bir kullanıcı koşuyordu. Benim eski httpd.conf dan yapılandırmaları kullanılan ve farklı kullanıcı yansıtmak için / var / lib / php / oturumunda izinlerini güncelleştirmek için unuttum.

. Test etmek için, ben 777 perma değişti Her şey iyi çalıştı, hata gitmişti:

# cd /var/lib/php
# chmod 0777 session

Yani perma döndü ve grubu değişti. Tabii ki EĞER apache üzerinde httpd çalışan kullanıcı hesabına newApacheUser değiştirin.

# chmod 0770 session
# chown root:newApacheUser session

Senin hala bu sorunu yaşıyorsanız olmadığını kontrol etmek için bir şey:

Ölümcül hata: iletisi ile yakalanmamış istisna 'Zend_Session_Exception' seansta zaten) session.auto-başlangıç ​​veya session_start (tarafından başlatıldı '

Bu sorunu üretmek 3 önemli nedeni vardır:

  1. session.auto_start 0 veya kapalı olarak ayarlanması gerekir. Sen phpinfo () koyarak kontrol edebilirsiniz; herhangi bir dosya ve tarayıcıda erişmeye çalıştığınızda, daha sonra arama auto_start bu 0 veya kapalı. Sonra yola veya 0 değilse.
  2. Sunucuda yapılandırmada oturum yol session.save_path edin. Varsayılan yapılandırmayla bu hatayı görüntüleyen eğer, 'oturumu zaten) session.auto-başlangıç ​​veya session_start (tarafından başlatılmıştır' / temp 'olarak ayarlayın
  3. Eğer zend oturumu başlatma önce kodu session_start () kullandık olabilir.

Çoğu durumda, seçenek 2 nedenidir.