【问题标题】:Yii session managementYii 会话管理
【发布时间】:2012-11-12 13:19:49
【问题描述】:

我正在尝试使用以下代码在 Yii 中设置一些会话变量:

    $session=new CHttpSession;
            $session->open() ;
            $session->setSessionName('My Session') ; 
            $session['sleep'] = 0 ;
            $session['attempts'] = 0 ;
            $session->writeSession('sleep','0') ; 
            $session['ip'] = $this->get_ip_address() ; $session->close() ;    var_dump($session,$session['ip']) ; 

但是,我无法在上面设置会话变量,转储结果如下:

object(CHttpSession)#17 (5) { ["autoStart"]=> bool(true) ["behaviors"]=> array(0) { } ["_initialized":"CApplicationComponent":private]=> bool(false) ["_e":"CComponent":private]=> NULL ["_m":"CComponent":private]=> NULL } string(3) "::1" 

它将 $session 和 $session['ip'] 视为两个完全不同的变量。有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: php session yii


    【解决方案1】:

    我以另一种方式在 Yii 下使用会话,我使用 app() 变量下的全局会话变量。所以你可以像这样存储值:

    Yii::app()->session['sleep'] = "value";
    

    你可以得到这样的值:

    $sleep = Yii::app()->session['sleep'];
    

    最后你可以像这样删除它:

    unset(Yii::app()->session['sleep']);
    

    这样您就可以在代码中的任何地方访问它们。我建议您阅读这篇文章:http://www.larryullman.com/2011/05/03/using-sessions-with-the-yii-framework/ 它包含您需要的所有信息。

    【讨论】:

    • 是的,这就是我最终做的!无论如何感谢您的回答!
    • 我也用过。但是,这和 CHttpSession 有什么区别呢?
    • 我认为唯一的区别是 CHttpsession 让你控制何时打开或关闭会话并使用面向对象的方法,其他方式使用 Yii 的状态。
    • 但是,“在代码中的任何地方”访问它们意味着“无处不在”与全局会话耦合。会话访问应该最小化和集中化。
    【解决方案2】:

    要删除 yii 中的 session 变量...

    请使用此实际格式。

    Yii::app()->session->remove('session_name');
    

    http://www.yiiframework.com/doc/api/1.1/CHttpSession#remove-detail

    【讨论】:

      【解决方案3】:
      $session = 新 \yii\web\Session(); $会话->打开(); $session['account_id'] = $id; $session['account_name'] = $name;

      【讨论】:

      • 只有代码的答案太棒了。请添加一些关于为什么/如何工作的解释。顺便说一句,这是 yii2,与 OP 的问题没有直接关系。
      猜你喜欢
      • 2014-05-08
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 2011-04-29
      • 2011-10-22
      • 2011-08-01
      • 2014-06-19
      相关资源
      最近更新 更多