YiiSoEasy 2014-12-30 14:55:15 43418次浏览 5条评论 13 5 0

首先,在Yii框架中,你不需要像标准PHP代码那样使用session_start(), 在 Yii 框架中,autoStart 属性缺省被设置为true,所以, 虽然没有使用 session_start(),你仍然可以使用 $_SESSION 全局变量,但最好使用 Yii框架封装的 Yii::app->session:

设置session变量:Yii::app()->session['var']='value'; 使用: echo Yii::app()->session['var']; 移除:unset(Yii::app()->session['var']);

更为复杂一点的使用时如何配置你的session 配置项可设在 protected/config/main.php的components中:

'session'=>array(
   'autoStart'=>false(/true),
   'sessionName'=>'Site Access',
   'cookieMode'=>'only',
   'savePath'='/path/to/new/directory',
),

将session保持在数据库的设置:

'session' => array (
    'class' => 'system.web.CDbHttpSession',
    'connectionID' => 'db',
    'sessionTableName' => 'actual_table_name',
),

好,还有什么呢?对了,为了调试,有时需要知道当前用户的session ID, 该值就在 Yii::app()->session->sessionID 中。

最后,当用户退出登录(logout),你需要消除痕迹,可使用: Yii::app()->session->clear() 移去所有session变量,然后,调用 Yii::app()->session->destroy() 移去存储在服务器端的数据。

觉得很赞
亿速云
  • 评论于 2014-12-31 11:11 举报

    yii2 下

    如果使用 yii\web\Userlogout 方法的话,默认配置下是会把 session destroy 的

    /**
     * Logs out the current user.
     * This will remove authentication-related session data.
     * If `$destroySession` is true, all session data will be removed.
     * @param boolean $destroySession whether to destroy the whole session. Defaults to true.
     * This parameter is ignored if [[enableSession]] is false.
     * @return boolean whether the user is logged out
     */
    public function logout($destroySession = true)
    {
        $identity = $this->getIdentity();
        if ($identity !== null && $this->beforeLogout($identity)) {
            $this->switchIdentity(null);
            $id = $identity->getId();
            $ip = Yii::$app->getRequest()->getUserIP();
            Yii::info("User '$id' logged out from $ip.", __METHOD__);
            if ($destroySession && $this->enableSession) {
                Yii::$app->getSession()->destroy();
            }
            $this->afterLogout($identity);
        }
    
        return $this->getIsGuest();
    }
    
  • 评论于 2014-12-31 12:52 举报

    作者注意一下格式,调整好再发布,这次我帮你重新编辑了一下。

    2 条回复
    评论于 2015-02-12 14:30 回复

    老大请教下https环境简单折腾的办法。

    评论于 2015-06-24 15:30 回复

    yii中,怎么将当前用户的id通过session传递到控制器,再存入数据库中某个外键字段?

    觉得很赞
  • 评论于 2015-02-12 14:28 举报

    我最近碰到一个问题。
    就是https下不能登陆情况。

    就算关闭csrf,能登陆但是不能获取到登陆的用户名。
    比如yii——base ,在https中
    如果不关csrf登陆会400错误。
    但是就算关闭了,登陆之后会跳转到首页。但是不会显示用户名!

    求教方法!

  • 评论于 2017-03-24 15:29 举报

    果断收藏

  • 评论于 2017-09-01 11:42 举报

    我是这两天刚刚上手Yii2的,发现一个问题,
    清除session数据的时候用Yii::app()->session->clear()方法会报错,
    仔细看看源码后发现已经没有clear()方法了,
    建议去除某一个session的时候用Yii::app()->session->remove()方法,
    它会返回被去除的这个session原来的值,没有该session就返回null,
    如果想要移去所有session变量,建议用Yii::app()->session->removeAll()方法,(没有返回值)

    1 条回复
    评论于 2017-10-16 14:24 回复

    那你很6哦

您需要登录后才可以评论。登录 | 立即注册