Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zend Framework PROBLEM Z SESJAMI
Forum PHP.pl > Forum > Przedszkole
raval
Witam,

Potrzebuję pomocy w ustawieniu SESJI w ZENDA FRAMEWORK. Od razu zaznaczam, że walcze z tym problemem już trzeci dzień. Problem polega na tym, że sesje działają bez problemu na serwerze lokalnym, natomiast po wgraniu projektu na serwer produkcyjny, wystakuje mi błąd zamieszcozny poniżej:

  1. Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'session has already been started by session.auto-start or session_start()' in /var/www/vhosts/{server_name}/subdomains/test/httpdocs/library/Zend/Session.php:451 Stack trace: #0 /var/www/vhosts/{server_name}/subdomains/test/httpdocs/library/Zend/Session/Namespace.php(143): Zend_Session::start(true) #1 /var/www/vhosts/{server_name}/subdomains/test/httpdocs/application/controllers/IndexController.php(82): Zend_Session_Namespace->__construct('session') #2 /var/www/vhosts/{server_name}/subdomains/test/httpdocs/library/Zend/Controller/Action.php(516): IndexController->articlesAction() #3 /var/www/vhosts/{server_name}/subdomains/test/httpdocs/library/Zend/Controller/Dispatcher/Standard.php(295): Zend_Controller_Action->dispatch('articlesAction') #4 /var/www/vhosts/{server_name}/subdomains/test/httpdocs/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Cont in /var/www/vhosts/{server_name}/subdomains/test/httpdocs/library/Zend/Session.php on line 451


Od razu podkreslam, że nigdzie w projekcie nie wywołuje funkcji session_start().
Mój kontroler wyglada następująco.

  1. class IndexController extends Zend_Controller_Action {
  2.  
  3. /**
  4.   * @var Zend_Session_Namespace
  5.   */
  6.  
  7. protected $_db_table_class = 'Application_Model_DbTable_Article';
  8. protected $_form_class = 'Application_Form_Browser';
  9. protected $_session;
  10.  
  11. public function init() {
  12. $this->view->baseUrl = $this->_request->getBaseUrl();
  13. Zend_Loader::loadClass('Zend_Db_Table');
  14. Zend_Loader::loadClass('Zend_Session');
  15. Zend_Loader::loadClass('Zend_Session_Namespace');
  16. ini_set('display_errors', 'on');
  17.  
  18. }
  19.  
  20. public function indexAction() {
  21. ...
  22. }
  23.  
  24.  
  25. public function articlesAction() {
  26. $this->view->title = "Artykuły";
  27.  
  28. $getPage = $this->_getParam('page');
  29.  
  30. if (!isset($this->_session->initialized)) {
  31. $this->_session = new Zend_Session_Namespace('session');
  32. Zend_Session::regenerateId();
  33. $this->_session->initialized = true;
  34. }
  35.  
  36. ...
  37.  
  38. }


Problem widzi na linijki

  1. $this->_session = new Zend_Session_Namespace('session');


Plik z klasą bootstrap:

  1. <?php
  2.  
  3. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  4. {
  5.  
  6. protected function _initAutoload()
  7. {
  8. $autoloader = new Zend_Application_Module_Autoloader(array(
  9. 'namespace' => 'Default_',
  10. 'basePath' => dirname(__FILE__),
  11. ));
  12.  
  13. return $autoloader;
  14. }
  15.  
  16.  
  17. protected function _initDoctype()
  18. {
  19. $this->bootstrap('view');
  20. $view = $this->getResource('view');
  21. $view->setEncoding('UTF-8');
  22. $view->doctype('XHTML1_STRICT');
  23.  
  24. }
  25.  
  26. protected function _initDb() {
  27. $db = Zend_Db::factory('Pdo_Mysql', array(
  28. 'host' =>'####',
  29. 'username' => '####',
  30. 'password' => '####',
  31. 'dbname' => '####',
  32. 'charset' => 'utf8'
  33. ));
  34. Zend_Db_Table_Abstract::setDefaultAdapter($db);
  35.  
  36. }
  37.  
  38. protected function _initSession() {
  39. $this->bootstrap('db');
  40.  
  41. $sessionConfig = array(
  42. 'name' => 'session',
  43. 'primary' => 'session_id',
  44. 'modifiedColumn' => 'modified',
  45. 'dataColumn' => 'session_data',
  46. 'lifetimeColumn' => 'lifetime'
  47. );
  48.  
  49. $saveHandler = new Zend_Session_SaveHandler_DbTable($sessionConfig);
  50. Zend_Session::setSaveHandler($saveHandler);
  51.  
  52. }
  53.  
  54. }


Problemu nawet nie rozwiązuje umieszczenie w kodzie bootstrap'a metody Zend_Session::start();

Plik kofiguracyjny application.ini:

  1. [production]
  2. ...
  3.  
  4. db.adapter = "pdo_mysql"
  5. db.config.host = "####"
  6. db.config.username = "####"
  7. db.config.password = "####"
  8. db.config.dbname = "####"
  9. db.config.charset = "utf8"
  10. db.isDefaultTableAdapter = true
  11.  
  12. phpSettings.session.auto_start = 0
  13. phpSettings.session.gc_probability = 0
  14. phpSettings.session.gc_divisor = 0
  15.  
  16. resources.session.save_handler = user
  17. resources.session.save_path = APPLICATION_PATH "/../data/session"
  18. resources.session.use_only_cookies = true
  19. resources.session.remember_me_seconds = 864000
  20. resources.session.saveHandler.class = "Zend_Session_SaveHandler_DbTable"
  21. resources.session.saveHandler.options.name = "session"
  22. resources.session.saveHandler.options.primary.session_id = "session_id"
  23. resources.session.saveHandler.options.primary.save_path = "save_path"
  24. resources.session.saveHandler.options.primary.name = "name"
  25. resources.session.saveHandler.options.primaryAssignment.sessionId = "sessionId"
  26. resources.session.saveHandler.options.primaryAssignment.sessionSavePath = "sessionSavePath"
  27. resources.session.saveHandler.options.primaryAssignment.sessionName = "sessionName"
  28. resources.session.saveHandler.options.modifiedColumn = "modified"
  29. resources.session.saveHandler.options.dataColumn = "session_data"
  30. resources.session.saveHandler.options.lifetimeColumn = "lifetime"
  31.  
  32. ...


Zauważyłem, że po wywołaniu funkcji phpinfo() wartości dla session.save_handler (ustawiona na file) oraz dla session.save_path są różnie niz ustawione w pliku konfiguracyjnym. Pytanie czy to w ogóle ma znaczenie?

Bardzo prosze o pomoc, już naprawdę nie wiem, co robie nie tak.

Pozdrawiam
czychacz
skorzystaj się z: http://php.net/manual/en/session.configuration.php

//edit: tam masz session.auto_start, które prawdopodobnie na serwerze produkcyjnym masz ustawione na 1 (czy tam true)
raval
Witam,

session.auto_start na serwerze produkcyjnym jest ustawione na false, bardzo dokładnie to weryfikowałem. Jest to jakaś inna przyczyna, o której nie mam pojęcia. Może jednak, ktoś spotkał się z podobnym problemem?? Dobija mnie już ten błąd.....
frantic09
Czytałeś może?
http://stackoverflow.com/questions/2418124...ork-application

"It's what it says it is. Zend_Auth tries to start a new session, since Zend_Session::start() has not yet been called."
raval
Tak czytałem i nic mi to nie pomogło. Zresztą jak wspomniałem na samym początku session_start() nie jest nigdzie u mnie implementowana.

--

Ponawiam temat, czy naprawde nikt nie jest w stanie mi pomóc questionmark.gif
CuteOne
Zrób test:
1. Skopiuj całą aplikację do nowego folderu
2. Wywal ze skopiowanej aplikacji wszystko co dotyczy session w config.ini
3. Dodaj do Bootstrapa

  1. public function _initSession() {
  2.  
  3. $session = new Zend_Session_Namespace('s');
  4. $session->aaa = 'aaaa';
  5.  
  6. echo $session->aaa;
  7. }


I odpal
raval
Hymmm.. po wrzuceniu całego projektu do podfolderu httpdocs/test i zmniany linijek kodu dotyczących sesji tak jak napisałeś, działa prawidłowo. Pytanie teraz jak zrobić, aby sesje działały tak samo w folderze httpdocs questionmark.gif

Chciałem ponowic pytanie.
CuteOne
Szczerze to nigdy nie miałem problemu z sesjami. Na moje oko to coś sknociłeś w konfiguracji smile.gif za komentuj ją we właściwej aplikacji i zobacz co się stanie

ps. dlaczego masz ustawiony save_path a zapisujesz sesje do bazy?
raval
Dzięki za odpowiedź

Cytat(CuteOne @ 7.11.2012, 09:40:22 ) *
ps. dlaczego masz ustawiony save_path a zapisujesz sesje do bazy?


To już takie moje kombinowanie.

Cytat(CuteOne @ 7.11.2012, 09:40:22 ) *
za komentuj ją we właściwej aplikacji i zobacz co się stanie


Zakomentowanie pozycji związanych z sesjami w config.ini, nie daje żadnego rezultatu. Ponadto zauważyłem, że jeżeli przerzuce projekt do podfolderu wartość session.save_handler jest ustawione na user, natomiast w folderze głownym wartość ta jest usatwiona na files. Nawet jeżeli zmianie wartość na user w config.ini, na serwerze jest wciąż ustawione files.

Czy to może być przyczyną niedziałającej sesji? jeśli tak to jak prawidłowo ustawić session.save_handler, ponieważ komenda phpSettings.session.save_handler = user nic nie daje.
CuteOne
Pogrzebałem trochę na googlu
https://github.com/denisura/zfSessionDataba...application.ini
https://github.com/denisura/zfSessionDataba...n/Bootstrap.php

ps. w jakim celu chcesz trzymać sesje w bazie?
StevDefs
Meilleur Site Pour Commander Cialis Commander Viagra Pharmacie priligy precio 2012 Zithromax Itchy Skin

Buy Doxycycline Online Safe Www Canadian Pharcharmy Online canadian cialis Lioresal Generique En Canada Isotretinoin 10mg Secure Generic Elocon 0.1% In Germany

Cialis A Paris Buy Amoxicillin Antibiotic Online Cialis 20mg Lilly Acheter viagra conseguir Viagra Frei Verkauflich 2013
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.