【问题标题】:Symfony2.1 - New Sessions stored over and overSymfony2.1 - 一遍又一遍地存储新会话
【发布时间】:2012-09-17 19:15:11
【问题描述】:

我想知道为什么我正在编写的网站页面的每次刷新或在不同页面之间移动都会创建新的会话记录(我将它们存储在数据库中而不是使用标准解决方案)。换句话说,每次单击(我没有使用 JS/AJAX)都会创建新记录/新会话。

这是我在配置文件中的会话配置:

session:
    lifetime:       7200
    domain:  MY_SERVER
    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:
  pdo:
    class: PDO
    arguments:
        dsn:            HOST
        user:           USER
        password:       PSWD

session.handler.pdo:
    class:     Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler
    arguments: [@pdo, %pdo.db_options%]

我尝试使用:

    auto_start:     false

但是我从 Symfony2.1 收到以下错误:

    The auto_start setting is deprecated. Just remove it from your configuration file.

那么我应该怎么做才能有正常的会话呢?

更新我还使用了以下内容:

    arguments:
      - "mysql:host=%database_host%;dbname=%database_name%"
      - %database_user%
      - %database_password%

也就是说,我对整个项目的基本数据库设置(存储在 parameters.yml 中)。

【问题讨论】:

  • 确保您的session.domain 值正确。
  • 感谢 Adrien,实际上我使用“域:%database_host%”设置。但是,当我输入远程服务器的确切名称时,Symfony2.1 的行为完全相同(每次刷新或页面更改后数据库中的新会话和新记录)。这对我来说真的很奇怪。
  • 嗯,没有PDO作为会话处理程序是否可以工作?
  • 是的。 Symfony2.1 中会话的默认配置很短:会话:~。这很好用(将会话存储到文件时)。更有趣的是,当我更改了一段时间的配置以便将会话存储到文件中,然后我会回到我的 PDO 配置,我得到了新的结果:永久会话(无论何时重新打开页面,之前打开的同一会话将继续)!
  • session 表是否存在?而且我不明白你是如何告诉 pdo 选择一个特定的数据库

标签: session symfony


【解决方案1】:

如果您没有将 session_id 设置为主键,就会发生这种情况。使用(来自文档,MySQL)创建会话表:

CREATE TABLE `session` (
    `session_id` varchar(255) NOT NULL,
    `session_value` text NOT NULL,
    `session_time` int(11) NOT NULL,
    PRIMARY KEY (`session_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

其他数据库见How to use PdoSessionHandler to store Sessions in the Database

【讨论】:

    猜你喜欢
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 2015-08-04
    相关资源
    最近更新 更多