我正在使用mysql数据库来存储用户会话数据。 我将用户重定向到另一个服务器,其中会话ID为变量(GET),然后我需要使用ID从数据库中检索会话。
我的远程服务器中使用的代码:
Yii::app()->session->sessionID = $sessionID;
Yii::app()->session->open();
结果是会话被覆盖而没有数据(打开新会话)。 我如何从数据库中检索会话?我是否需要为表格创建模型,还是可以使用YII会话功能?
感谢, 丹尼
答案 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,此会话必须存在。