2012-09-11 2 views
3

업데이트 : 문제 해결, 의견보기 (많은 이슈, 버전 차이점이 있지만 그 중 하나만 포함).Symfony2는 DB 저장 세션을 구성합니다.

config.yml 파일의 Symfony2에서 세션을 구성하려고합니다. 그것은 내가 주어진 링크에서 정확히 동일한 테이블을 만든 http://symfony.com/doc/2.0/cookbook/configuration/pdo_session_storage.html

Symfony2의 요리 책을 기반으로

session: 
    default_locale: %locale% 
    lifetime:  7200 
    auto_start:  true 
    storage_id:  session.storage.pdo 

parameters: 
    pdo.db_options: 
    db_table: session 
    db_id_col: session_id 
    db_data_col: session_value 
    db_time_col: session_time 

services: 
    pdo: 
    class: PDO 
    arguments: 
     - "mysql:dbname=%database_name%" 
     - %database_user% 
     - %database_password% 

session.storage.pdo: 
    class:  Symfony\Component\HttpFoundation\SessionStorage\PdoSessionStorage 
    arguments: [@pdo, %session.storage.options%, %pdo.db_options%] 

: 나는 다음과 같은 구성을 가지고있다.

그러나 작동하지 않습니다. "빈"오류가 발생합니다 (오류 메시지는 없지만 "PDO 예외"및 "오류 예외"). 나는 Symfony2 또는 어떤 정보 (내가 요리 책을 쓰고있는 이유인지)를 구성하는데 많은 지식이 없다는 것을 인정한다. 나는 많은 시간을 허비하고 인터넷에서이 문서에 대해 많은 문서를 보지 못했다. 인터넷이이 경우에 대해 침묵한다는 사실을 언급하지 않았다. (Symfony2에서 DB 테이블에 저장되어있는 세션을 가지고있다.)

내 NetBeans는 마지막 줄에 대해 STH을 "소리"입니다 :

arguments: [@pdo, %session.storage.options%, %pdo.db_options%] 

"ScannerException 동안 우리가 어떤 토큰을 시작할 수 없습니다이 발견 문자 @ (64)를 가지고 다음 토큰에 대한 검사".

업데이트 : 음, 구성에 관한 것이 확실하지 않습니다. Symfony2의 요리 책 (use ...) 예제가 실제로 Symfony2의 번들에있는 파일 구조와 일치하지 않음을 알 수 있습니다. 한마디로 그런 파일 경로는 없지만 실제 파일을 넣은 후에도 여전히 작동하지 않습니다.

+1

아마도 잘못된 문서를 읽고있을 것입니다. v2.1을 다운로드 한 경우 다음을 사용해야합니다. http://symfony.com/doc/current/cookbook/configuration/pdo_session_storage.html – ChocoDeveloper

+0

글쎄. 버전의 차이점에 대해 옳았습니다. 또한, 일부 문제는 최신 v2.1에 연결되었습니다. 일부는 아닙니다. 유감스럽지 않은 Symfony2에 대한 것들이 있습니다. – forsberg

답변

4

Symfony 2.5에서와 같은 문제가있었습니다. 내 해결책은 php.ini에서 session.auto_start를 비활성화하는 것이 었습니다. PDO가 세션을 제어하기 전에 세션이 시작되면 PdoSessionStorage가 인계받지 않습니다. 나는 처음에 그것을 간과 했었습니다. 왜냐하면 잘못된 것을 수정했기 때문에 (저는 php.ini의 복사본이 2 개였습니다). 이 당신에 문제가 있는지 확인하려면이 명령을 실행 : 그 반환하면

echo ini_get('session.auto_start'); 

를 '1'또는 '사실'은 다음의 php.ini에서 이것을 설정해야합니다 :

session.auto_start = 0 

그래서 참조를 위해, 여기에이 작업 할 심포니 2.5 내 설정이다 :

config.yml을

framework: 
    session: 
     handler_id: session.handler.pdo 

parameters: 
    pdo.db_options: 
     db_table: session 
     db_id_col: session_id 
     db_data_col: session_value 
     db_time_col: session_time 

services: 
    session.handler.pdo: 
     class:  Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler 
     arguments: ["@pdo", "%pdo.db_options%"] 
    pdo: 
     class: PDO 
     arguments: 
      dsn: "mysql:host=%database_host%;port=%database_port%;dbname=%database_name%" 
      user: "%database_user%" 
      password: "%database_password%" 
     calls: 
      - [setAttribute, [3, 2]] # \PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION