YII从db检索会话

时间:2013-06-17 21:34:18

标签: database session yii session-state

我正在使用mysql数据库来存储用户会话数据。 我将用户重定向到另一个服务器,其中会话ID为变量(GET),然后我需要使用ID从数据库中检索会话。

我的远程服务器中使用的代码:

  Yii::app()->session->sessionID = $sessionID;
  Yii::app()->session->open();

结果是会话被覆盖而没有数据(打开新会话)。 我如何从数据库中检索会话?我是否需要为表格创建模型,还是可以使用YII会话功能?

感谢, 丹尼

2 个答案:

答案 0 :(得分:4)

由于CDbHttpSession relies on PDO to access database,您无需为会话表创建模型。

会话组件的配置是什么?

您可以通过调用open()方法手动指定会话ID并启动会话。这个方法sets session callback methods使用PHP的session_set_save_handler函数。 readSession($id)是其中之一,根据session_set_save_handler的手册页:

  

当会话开始或调用session_start()时,PHP会在内部调用此回调。

由于session_start creates a session or resumes the current one,您必须授予在设置会话标识符之前未自动启动会话的权限。 Yii会话实例的autoStart属性对此负责,必须设置为false(默认为true)。

还必须指定用于检索会话数据的数据库连接的标识符connectionID。这很重要,否则:

  

如果未设置,将自动创建并使用SQLite数据库。

记住这一切我认为会话组件的配置必须如下所示:

'session' => array(
    'class' => 'CDbHttpSession',
    'autoStart' => false,
    'connectionID' => 'db',
    'sessionTableName' => 'your_session_table_name',
    'autoCreateSessionTable' => false    // for performance reasons
)

答案 1 :(得分:0)

php使用此名称(PHPSESSID)在cookie中存储sessionid yii还将会话ID存储在浏览器的cookie中(因为它使用php默认会话)。 如果您在cookie中更改PHPSESSID可变,您将能够更改我们的会话。 只需你必须这样做

setcookie('PHPSESSID',$sessionId); //其中$ sessionId是您从db读取的会话ID,此会话必须存在。