【问题标题】:Yii: $_SESSION undefined, but Yii::app()->session worksYii: $_SESSION 未定义,但 Yii::app()->session 有效
【发布时间】:2014-09-30 08:44:10
【问题描述】:

我在我的应用程序中启用了这样的会话(在config.phpcomponents 部分):

'session' => array(
    'class' => 'system.web.CDbHttpSession',
    'connectionID' => 'db',
    'timeout' => 86400,
    'sessionName' => 'SOMEABSTRACT_PHPSESSID',
),

UserIdentity 我尝试这样做:

$_SESSION['userid'] = $model->id;

这意味着我将在我登录用户后设置该新会话。但是,当我尝试访问 $_SESSION['userid'] 或只是 $_SESSION 以进行阅读时,我得到了这个异常:

Undefined variable: _SESSION

这是我尝试访问此会话数组的方式:

echo '<pre>';
die(var_dump($_SESSION, $_SESSION['userid']));

我对此没有任何线索,所以我对这个问题的两个简单问题是:

  1. 为什么只有在启用 Yii 的会话并且 autoStart =&gt; true 时才会发生这种情况?
  2. 如何解决这个问题?

PS 我需要这个用于 CometChat 与 Yii 框架的集成。

【问题讨论】:

  • 在配置中,会话自动启动是否为真..?
  • 是的。当我输入session_start() 时,我根本没有得到$_SESSION['userid']。但是如果我在尝试设置会话时设置session_start(),我会得到这个异常:A session had already been started - ignoring session_start()
  • @NaincyGupta - 默认为true
  • 面临同样的问题。如果您找到解决方案,请告诉我。

标签: php session yii comet


【解决方案1】:

您可以拥有@session_start();。如果会话已经开始,这将抑制警告,并设置像 Yii::app()-&gt;session['userid'] = $model-&gt;id; 这样的变量,并在需要的地方使用 Yii::app()-&gt;session['userid'] 检索相同的变量。 您也可以在会话开始后像这样设置登录用户

 $this->_id=$model->id;
 $this->setState('title', $model->username);
 $this->setState('role', $model->role);

以上是登录用户在 yii 中的默认变量。要在会话中创建新用户条目,您可以使用 Yii::app()-&gt;session['variablename']

【讨论】:

  • 我必须访问 Yii 项目范围之外的会话变量。这行不通。
【解决方案2】:

试试这样,在你的 UserIdentity.php -

//After successfully authentication, create session

    Yii::app()->session;
    Yii::app()->session['userid'] = $user->id;


//Now you can get anywhere like this - 

   echo Yii::app()->session['userid'];

【讨论】:

  • 我必须访问 Yii 项目范围之外的会话变量。这行不通。
  • @Karadža 会话变量在特定项目范围内而不是在外部工作。好的,在记录后在项目范围内外的地方打印echo Yii::app()-&gt;user-&gt;id 并给我回复,输出是什么?
猜你喜欢
  • 1970-01-01
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多