2012-12-19 4 views
2

이 코드 http://blog.digitalstruct.com/2010/10/24/zend-framework-cache-backend-libmemcached-session-cache/Zend_Session_SaveHandler_Interface과 SESSION_ID mysterie

이 내 SESSION_ID이 신비하게 행동하는 것을 제외하고, 좋은 작품에 따라 설치에 내 자신의 Zend_Session_SaveHandler을 시도하고있다. 위의 블로그에서 찾을 수있는 Zend_Session_SaveHandler_Cache 클래스를 사용하고 있습니다 (단, 내 자체 라이브러리에 주차 했으므로 이름이 My_로 시작합니다). 내 부트 스트랩에서

나는이 :

protected function _initSession() 
{    
    $session = $this->getPluginResource('session'); 
    $session->init();  
    Zend_Session::getSaveHandler()->setCache($this->_manager->getCache('memcached')); 
} 

는 내 세션 내 .ini 파일 지금까지

resources.cachemanager.memcached.frontend.name       = Core 
resources.cachemanager.memcached.frontend.options.automatic_serialization = On 
resources.cachemanager.memcached.backend.name        = Libmemcached 
resources.cachemanager.memcached.backend.options.servers.one.host   = localhost 
resources.cachemanager.memcached.backend.options.servers.one.port   = 11213 

너무 좋은이 코드를 기반으로 가야. 누군가가 로그인을 시도 할 때까지 Zend_Session :: rememberMe()가 호출됩니다. Zend_Session의 의견에 하나 읽을 수

일반적으로 "에서 rememberme은()"는 보안 컨텍스트의 변화를 나타내는

, 그래서 물론 이것은 매우 사실이다

새로운 세션 ID, 새로운 세션을 사용해야합니다 id가 생성됩니다. 사용자 Zend_Auth 데이터는 성공적인 로그인 후에이 새로운 세션에 기록됩니다. 블로그에서 원래 클래스에 일부 로깅 기능을 추가했기 때문에 이것을 볼 수 있습니다.

여기가 잘못되었습니다. Zend_Session은 이전 ID의 세션 데이터를 계속 읽으므로이 새로운 ID는 Zend_Session에 전달되지 않습니다. 즉, Zend_Auth 인스턴스가없는 것. 따라서 사용자는 더 이상 로그인 할 수 없습니다.

다시 말해서, 재생성 후 새 ID로 saveHandler를 작동시키는 방법은 무엇입니까? 도움을 청합니다.

답변

1

여기에 얼굴이 붉어졌습니다. 나는이 오류를 찾기 위해 잘못된 장소를 찾고있었습니다. 제 세션 saveHandler는 잘 작동했습니다 (libmemcached 세션 관리를 원하면 Mike Willbanks his work을 추천 할 수 있습니다).

무엇이 잘못 되었습니까? 음, 파일에서 libmemcached로 전환하는 것 외에도 부트 스트랩에서 내 세션을 설정하는 것을 내 application.ini에서 설정하는 것으로 바 꾸었습니다. 대신 (당시 설정 내 세션 옵션으로 부트 스트랩에 사용 된) 내 application.ini에

session.cookie_domain = mydomain.com 

같은 라인을 넣는 그래서, 지금, 제대로 쓴

resources.session.cookie_domain = mydomain.com 

그리고 이것은이다 일들이 잘못 되었기 때문에 .... 나는 단지 생산 라인을 변경했기 때문에 ini 파일을 더 이상 바꾸지 않았다. 즉, 내 개발 환경. 내 생산 환경의 cookie_domain을 얻었습니다. 이는 배포 중 다른 도메인 이름을 사용하는 경우 잘못된 것입니다. 따라서 모든 페이지가로드 될 때마다 내 쿠키가 무효화되고 새 세션이 시작되었습니다. 신비가 해결했습니다 ...