YII 存放登录信息的类

如果在用户登录后想额外调用除 user,id之外的数据库变量,可以这样设置:

在登陆验证时候增加额外项:

在UserIdentity.php中

Java代码  

  1. class UserIdentity extends CUserIdentity{  
  2.     $this->setState('last_login_time',$user->last_login_time);  
  3. }  

如此,在应用程序的任何地方,这个属性可以通过如下获取:Yii::app()->user->getState('last_login_time')

再重新登录看看,

Java代码  

  1. public function setState($key, $value, $defaultValue = null) {  
  2.     $key = $this->getStateKeyPrefix() . $key;  
  3.     if ($value === $defaultValue)  
  4.         unset($_SESSION[$key]);  
  5.     else  
  6.         $_SESSION[$key] = $value;  
  7. }  

其实他将信息放到session中了

其中的user是yii的一个components.需要在protected/config/main.php中定义

Java代码  

  1. 'user'=>array(  
  2.         // enable cookie-based authentication  
  3.         'allowAutoLogin'=>true,  
  4.         'loginUrl' => array('site/login'),  
  5. ),  

通过扩展CWebUser添加信息到Yii:app()->user

步骤:1、添加$user属性到UserIdentity类。 添加getUser()方法-getter上面这个属性。加setUser($user)方法-setter上面这个属性,它可以赋值给user的信息通过$user这个属性。

用户信息存到数据库表里
我的UserIdentity类例子:

Java代码  

  1. <?php  
  2. class UserIdentity extends CUserIdentity {  
  3.     /** 
  4.      * User's attributes 
  5.      * @var array 
  6.      */  
  7.     public $user;  
  8.   
  9.     public function authenticate() {  
  10.         $this->errorCode = self::ERROR_PASSWORD_INVALID;  
  11.         $user = User::model()->findByAttributes(array('email' => CHtml::encode($this->username)));  
  12.         if ($user) {  
  13.             if ($user->password === md5($user->salt . $this->password)) {  
  14.                 $this->errorCode = self::ERROR_NONE;  
  15.                 $this->setUser($user);  
  16.             }  
  17.         }  
  18.         unset($user);  
  19.         return !$this->errorCode;  
  20.     }  
  21.   
  22.     public function getUser() {  
  23.         return $this->user;  
  24.     }  
  25.   
  26.     public function setUser(CActiveRecord $user) {  
  27.         $this->user = $user->attributes;  
  28.     }  
  29. }  
  30.   
  31. ?>   

现在用户的属性已经设置,创建WebUser类并把它放在/protected/components

Java代码  

  1. <?php  
  2. class WebUser extends CWebUser {  
  3.     public function __get($name) {  
  4.         if ($this->hasState('__userInfo')) {  
  5.             $user = $this->getState('__userInfo', array());  
  6.             if (isset($user[$name])) {  
  7.                 return $user[$name];  
  8.             }  
  9.         }  
  10.        //this method can user Yii::app()->user->{$user的attribute}  
  11.         return parent::__get($name);  
  12.     }  
  13.   
  14.     public function login($identity, $duration) {  
  15.         $this->setState('__userInfo', $identity->getUser());  
  16.         parent::login($identity, $duration);  
  17.     }  
  18.   
  19.     public function getIsGuest() {  
  20.         $customer = Yii::app()->session->get('customer');  
  21.         return $customer === null || $customer['id'] === null;  
  22.     }  
  23. }  
  24. ?>  

 记得设置一下这个类Yii::app()->user

Java代码  

  1. <?php  
  2. 'components'=>array(  
  3.     'user'=>array(  
  4.         'class'=>'WebUser',  
  5.     )  
  6. )  
  7. ?>   

调用方法

Yii::app()->user->getIsGuest()

Yii::app()->user->__userInfo;

 

2用户信息存到单独的文件

Java代码  

  1. <?php  
  2. class WebUser extends CWebUser  
  3. {  
  4.     public function getReturnUrl($defaultUrl=null)  
  5.     {     
  6.         $userInfo = $this->getUserInfo();  
  7.         if(isset($userInfo['url'])){  
  8.             return $userInfo['url'];  
  9.         }  
  10.         return parent::getReturnUrl($defaultUrl);  
  11.     }  
  12.   
  13.     protected function afterLogin($fromCookie)  
  14.     {  
  15.         parent::afterLogin($fromCookie);  
  16.         $users = require(dirname(__FILE__) . '/../config/password.php');  
  17.   
  18.         $this->setState('userInfo',$users[$this->getName()]);  
  19.     }  
  20.   
  21.     public function getUserInfo()  
  22.     {  
  23.         return $this->getState('userInfo',array());  
  24.     }  
  25. //accessRules  roles  
  26.     public function checkAccess($operation,$params=array(),$allowCaching=true)  
  27.     {  
  28.         $userInfo = $this->getUserInfo();  
  29.         if($userInfo['group'] == $operation){  
  30.             return true;  
  31.         }  
  32.         return parent::checkAccess($operation,$params,$allowCaching);  
  33.     }  
  34. }  

 password.php

Java代码  

  1. <?php  
  2.   
  3. return array(  
  4.     'dianyin'           => array(  
  5.         'pwd'           => 'dianyinXX',  
  6.         'url'           => array('dianyin/order/index'),  
  7.         'merchant_id'   => 1,  
  8.         'group'         => 'dianyin',  
  9.      ),  
  10.     'boer' => array(  
  11.         'pwd'           => 'boerXX',  
  12.         'url'           =>  array('third_jifen/default/index'),  
  13.         'merchant_id'   => 1,  
  14.         'group'         => 'jifen',  
  15.     ),  
  16. );  

 权限checkAccess结合roles

Java代码  

  1. public function accessRules()  
  2. {  
  3.     return array(  
  4.         array('allow', // allow authenticated users to access all actions  
  5.             'roles'=>array('jifen'),  
  6.         ),  
  7.         array('allow',  // deny all users  
  8.             'actions'=>array('login','logout'),  
  9.             'users'=>array('*'),  
  10.         ),    
  11.         array('deny',  // deny all users  
  12.             'users'=>array('*'),  
  13.         ),  
  14.       
  15.     );  
  16. }  
时间: 2024-11-02 02:26:06

YII 存放登录信息的类的相关文章

Yii框架登录流程分析_php实例

本文详细分析了Yii框架的登录流程.分享给大家供大家参考.具体分析如下: Yii对于新手来说上手有点难度,特别是关于session,cookie和用户验证.现在我们就Yii中登录流程,来讲讲Yii开发中如何设置session,cookie和用户验证方面的一些通用知识 1. 概述 Yii是一个全栈式的MVC框架,所谓全栈式指的是Yii框架本身实现了web开发中所要用到的所有功能,比如MVC,ORM(DAO/ActiveRecord), 全球化(I18N/L10N), 缓存(caching), 基于

sharesdk-请大神指教!shareSDK第三方登录,返回了用户登录信息,但是一直报空指针异常,可是有返回值

问题描述 请大神指教!shareSDK第三方登录,返回了用户登录信息,但是一直报空指针异常,可是有返回值 这是我的代码,先点击一个图片按钮,然后跳转到授权界面,当授权完成的时候,再把值返回在这个类里面,但是运行的时候一直报这句left_menu_fragment_textview.setText(userInfo.getUserName());是空指针异常,这是怎么回事 public class LeftMenuFragment extends BaseFragment { private Im

Android开发中用户登录信息怎么关联整个APP

问题描述 Android开发中用户登录信息怎么关联整个APP 5C Android开发,App的某些功能显示是用户登录后才能用的.可是用户登录后怎么关联整个APP呢? 解决方案 用一个全局变量(单例类)保存用户信息. 解决方案二: 看你的App需不需要实现自动登录功能,如果需要的话可以存到SharedPreferences中 解决方案三: 你可以写一个reciever,监听进程的启动和停止,进程package就是你项目的package,是android唯一的.

用户权限-Android项目中怎么传递用户的登录信息

问题描述 Android项目中怎么传递用户的登录信息 我要建立一个android项目,这个项目中使用ksoap2调用webservice(我用的是axis2)中的方法,但在这个项目的apk应用过程中,我随时可能会用到登录人的信息对该登录人的权限进行判断,因此我需要一个容器来对登录人信息进行存储,类似于B/S架构中的session.有过相关项目经验的各位大神,能不能给我提一个解决方案,急用,在线等,大恩不言谢! 解决方案 在application中放一个静态成员变量保存登录人的信息AndroidM

登录信息采用cookie保存的问题

问题描述 请大家提供一些登录信息采用cookie保存的代码 解决方案 解决方案二:baidu,google有很多!解决方案三:varnever=newDate();never.setTime(never.getTime()+10*365*24*60*60*1000);varexpstr="expires="+never.toUTCString()+";";document.cookie="area="+escape("北京")

php同时使用session和cookie来保存用户登录信息的实现代码_php实例

1.用户登录状态操作类UserLogin <?php final class UserLogin { public function __construct() { } public static function getUserInfo() { if (isset($_COOKIE["user_id"])&&$_COOKIE["user_id"]&&(trim($_COOKIE["user_id"])!=&

用于获得硬盘物理信息的类

介绍: 有很多时候我需要知道机器的一些物理信息(比如激活技术),所以我就利用放高考假的时间,封装了一个可以获得硬盘的物理信息的类,方便大家.此类在我的机器上测试效果如下: CGetMachineInfo类简介: 类名: CGetMachineInfo 类中的一些要说明的函数: 功能 int ReadPhysicalDriveInNT (void) 在NT内核系统下读取硬盘的物理信息 int ReadDrivePortsInWin9X (void) 在9X内核系统下读取硬盘的物理信息 int Re

php中如何同时使用session和cookie来保存用户登录信息

本篇文章是对在php中同时使用session和cookie来保存用户登录信息的实现代码进行了详细的分析介绍,需要的朋友参考下   同时使用session和cookie来保存用户登录信息1.数据库连接配置页面:connectvars.php 复制代码 代码如下: <?php //数据库的位置 define('DB_HOST', '127.0.0.1'); //用户名 define('DB_USER', 'root'); //口令 define('DB_PASSWORD', '19900101');

电脑提示可能需要其他登录信息怎么办?

最近有用户发现电脑右下角总是弹出"可能需要其他登录信息"的提示,十分的碍眼,那么怎样来解决这个问题呢? 首先打开运行窗口,输入regedit回车进入注册表编辑器. 依次点击目录HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesNlaSvcParametersInternet. 在右侧列表中找到EnableActiveProbing值,修改数值数据为0.