3

更新: 問題は解決しました。コメントを参照してください (多くの問題、バージョンの違いはそのうちの 1 つにすぎません)。

config.yml ファイルで 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%]

Symfony2 のクックブックhttp://symfony.com/doc/2.0/cookbook/configuration/pdo_session_storage.htmlに基づいています

指定されたリンクとまったく同じテーブルを作成しました。

しかし、うまくいきません。「空白」のエラーが表示されます (エラー メッセージは表示されませんが、「PDO 例外」と「エラー例外」が表示されます)。私は、Symfony2 の構成やその他の情報についてあまり知識がないことを認めます (それが、私がクックブックを使用している理由です)。私は多くの時間を失い、インターネットでそれに関するドキュメントをあまり見ませんでした。インターネットがこのケースについてまったく沈黙しているという事実に言及していません (セッションが Symfony2 の DB テーブルに保存されています)。

私の NetBeans は、最後の行について sth を「叫んでいます」:

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

「次のトークンのスキャン中に ScannerException が発生し、トークンを開始できない文字 @(64) が見つかりました」。

更新:うーん、それが構成に関するものかどうかはわかりません。Symfony2 のクックブック (use...) の例は、実際には Symfony2 のバンドル内のファイル構造と一致していないことがわかります。一言で言えば、そのようなファイルパスはありませんが、実際のものを入れた後でも機能しません。

4

1 に答える 1

4

私は Symfony 2.5 であなたと同じ問題を抱えていました。私の解決策は、php.ini で session.auto_start を無効にすることでした。PDO がセッションを制御する前にセッションが開始された場合、PdoSessionStorage は引き継ぎません。間違ったものを変更していたため、最初はこれを見落としていました (php.ini のコピーが 2 つありました)。これがあなたの問題かどうかを確認するには、次のコマンドを実行します。

echo ini_get('session.auto_start');

それが '1' または 'true' を返す場合は、必ず php.ini でこれを設定してください:

session.auto_start = 0

参考までに、これを機能させるための Symfony 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
于 2014-11-11T17:58:34.080 に答える