Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 从数据库检索会话_Database_Session_Yii_Session State - Fatal编程技术网

Database 从数据库检索会话

Database 从数据库检索会话,database,session,yii,session-state,Database,Session,Yii,Session State,我使用mysql数据库来存储用户会话数据。 我使用会话id作为变量(GET)将用户重定向到另一台服务器,然后需要使用该id从DB检索会话 我的远程服务器中使用的代码: Yii::app()->session->sessionID = $sessionID; Yii::app()->session->open(); 结果是会话被覆盖而没有数据(新会话被打开)。 如何从数据库中检索会话?我是否需要为表格创建模型,或者是否可以使用YII会话功能 谢谢, Danny您不

我使用mysql数据库来存储用户会话数据。 我使用会话id作为变量(GET)将用户重定向到另一台服务器,然后需要使用该id从DB检索会话

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

  Yii::app()->session->sessionID = $sessionID;
  Yii::app()->session->open();
结果是会话被覆盖而没有数据(新会话被打开)。 如何从数据库中检索会话?我是否需要为表格创建模型,或者是否可以使用YII会话功能

谢谢,
Danny

您不必为会话表创建模型,因为
依赖PDO访问数据库

会话组件的配置是什么

指定会话ID并通过调用方法手动启动会话。此方法使用PHP的函数。根据
会话设置保存处理程序的手册页面:

当会话启动或调用session_start()时,PHP会在内部调用此回调

由于
创建会话或恢复当前会话
,您必须在设置会话标识符之前授予该会话不会自动启动的权限。Yii的会话实例的属性对此负责,并且必须设置为
false
(默认为
true

此外,还必须指定通过数据库连接检索会话数据的标识符。这很重要,否则:

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

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

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

您不必为会话表创建模型,因为
依赖PDO访问数据库

会话组件的配置是什么

指定会话ID并通过调用方法手动启动会话。此方法使用PHP的函数。根据
会话设置保存处理程序的手册页面:

当会话启动或调用session_start()时,PHP会在内部调用此回调

由于
创建会话或恢复当前会话
,您必须在设置会话标识符之前授予该会话不会自动启动的权限。Yii的会话实例的属性对此负责,并且必须设置为
false
(默认为
true

此外,还必须指定通过数据库连接检索会话数据的标识符。这很重要,否则:

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

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

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

php使用这个名称(PHPSESSID)将sessionid存储在cookie中,并且还将会话id存储在浏览器的cookie中(因为它使用php默认会话)。 如果您在cookie中更改PHPSESSID变量,您将能够更改我们的会话。 你必须这么做


setcookie('PHPSESSID',$sessionId)//其中$sessionId是从db读取的会话id,并且此会话必须存在

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


setcookie('PHPSESSID',$sessionId)//其中$sessionId是从db读取的会话id,并且此会话必须存在

恐怕这不是会话的设置方式……我将会话id与数据库本身中的所有变量和数据(作为对象)一起保留。请参阅:CDbHttpSession-恐怕这不是会话的设置方式…我将会话id与数据库本身中的所有变量和数据(作为对象)一起保留。请参阅:CDbHttpSession-这正是我的配置的外观:)。。。现在你说我只需要使用标准的YII查询生成器检索会话?顺便说一句,如果你想使用默认的-YiISessionThank,工作得很好,你不必使用sessionTableName!添加autostart=false后不需要使用查询生成器。这正是我的配置的外观:)。。。现在你说我只需要使用标准的YII查询生成器检索会话?顺便说一句,如果你想使用默认的-YiISessionThank,工作得很好,你不必使用sessionTableName!添加autostart=false后不需要使用查询生成器。