Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Zend Framework PROBLEM Z SESJAMI
raval
post 31.10.2012, 14:34:36
Post #1





Grupa: Zarejestrowani
Postów: 100
Pomógł: 0
Dołączył: 1.04.2011

Ostrzeżenie: (0%)
-----


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

Ten post edytował raval 31.10.2012, 15:04:33
Go to the top of the page
+Quote Post
czychacz
post 31.10.2012, 16:12:14
Post #2





Grupa: Zarejestrowani
Postów: 189
Pomógł: 13
Dołączył: 20.09.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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)

Ten post edytował czychacz 31.10.2012, 16:13:03
Go to the top of the page
+Quote Post
raval
post 2.11.2012, 08:15:47
Post #3





Grupa: Zarejestrowani
Postów: 100
Pomógł: 0
Dołączył: 1.04.2011

Ostrzeżenie: (0%)
-----


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.....
Go to the top of the page
+Quote Post
frantic09
post 2.11.2012, 09:24:20
Post #4





Grupa: Zarejestrowani
Postów: 42
Pomógł: 6
Dołączył: 7.03.2011
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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."


--------------------
  1. echo "Wydaje mi się, że mogłoby to zadziałać... ;)";
Go to the top of the page
+Quote Post
raval
post 6.11.2012, 09:13:55
Post #5





Grupa: Zarejestrowani
Postów: 100
Pomógł: 0
Dołączył: 1.04.2011

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
CuteOne
post 6.11.2012, 09:23:52
Post #6





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


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

Ten post edytował CuteOne 6.11.2012, 09:25:03
Go to the top of the page
+Quote Post
raval
post 7.11.2012, 09:20:36
Post #7





Grupa: Zarejestrowani
Postów: 100
Pomógł: 0
Dołączył: 1.04.2011

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
CuteOne
post 7.11.2012, 09:40:22
Post #8





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
raval
post 7.11.2012, 14:46:16
Post #9





Grupa: Zarejestrowani
Postów: 100
Pomógł: 0
Dołączył: 1.04.2011

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
CuteOne
post 8.11.2012, 10:28:11
Post #10





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


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?

Ten post edytował CuteOne 8.11.2012, 10:28:36
Go to the top of the page
+Quote Post
StevDefs
post 24.08.2019, 06:10:18
Post #11





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 22.08.2019

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.04.2024 - 00:48