zoukankan      html  css  js  c++  java
  • YII学习笔记-登录后的session的总结

      在YII框架的默认的登录后的session数据是id,name,__states这三个数据。

      在搭配好YII框架环境后,可以使用admin/admin,来登录系统。如果在protected/views/layouts/main.php代码中嵌套一个这样的语句

    <?php
        session_start();
        print_r($_SESSION);
    ?>

    就会显示

    Array ( [85cd7ad9d44e5587f655722c60fd3dd9__id] => admin [85cd7ad9d44e5587f655722c60fd3dd9__name] => admin [85cd7ad9d44e5587f655722c60fd3dd9__states] => Array ( ) )

    这样的数据

    你会发现id和那么的数据都是admin,也就是说,其实yii就只为我们提供了一个用户名就作为用户凭证。我们更多的时候需要用session来记录更多的用户凭证,比如都用户的权限等。

    首先我们来试着修改id这样数据。

      首先你可以提供我们登录的的login在模型LoginForm.php中。

    public function login()
        {
            if($this->_identity===null)
            {
                $this->_identity=new UserIdentity($this->username,$this->password);
                $this->_identity->authenticate();
            }
            if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
            {
                $duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
                Yii::app()->user->login($this->_identity,$duration);
                return true;
            }
            else
                return false;
        }

    我们最好不要改动framework文件的内容。所以我们改动传进去的数据,也就是UserIdentity这个类。

    为什么id和name都是admin,因为在类UserIdentity中提供了一个这样的方法

    public function getId()
        {
            return $this->username;
        }

    我们需要重写这个方法。

    然后添加更过的数据,在上面有一个__states这项数据,我们可以在UserIdentity中重写getPersistentStates方法

    内容我先随意添加

           public function getPersistentStates()
        {
            return array("a"=>"b");
        }
        public function getId() {
                return 10;
            }

    新的session将会变为

    Array ( [85cd7ad9d44e5587f655722c60fd3dd9__id] => 10 [85cd7ad9d44e5587f655722c60fd3dd9__name] => admin [85cd7ad9d44e5587f655722c60fd3dd9a] => b [85cd7ad9d44e5587f655722c60fd3dd9__states] => Array ( [a] => 1 ) )

    然后我们就可以通过Yii::app->user->a来访问我们添加的新数据了。

    操作session

    在YII中不用自己使用session_start()来开启session,yii本身已经开启。

    当然你也可以在使用$_SESSION来控制session,但是不推荐。

    用YII内置的函数控制

    首先配置main.php文件

    '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变量:
    Yii::app()->session['var']='value';
    使用: echo Yii::app()->session['var'];
    移除: unset(Yii::app()->session['var']);

    获取用户的session ID

    Yii::app()->session->sessionID

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

  • 相关阅读:
    通知协议KVO的用法
    UIImageView用法
    默默的学习!
    多输入参数的方法
    一本书的摘录
    实例、局部、静态变量(java)
    分数相加的例题
    类的继承
    多线程
    单例
  • 原文地址:https://www.cnblogs.com/xiashuo-he/p/3366662.html
Copyright © 2011-2022 走看看