请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,我想通过一个变量保存登录用户的方法,但是一直实现不了,求解

我是想通过全局变量的方法获取登录用户的信息,但是没成功,以下是方法,求指点,谢谢:

*params.php*

return [
	'title' => '微信图书商城',
	'user_info' => '',
	'domain' => [
		'www' => '',
		'm' => '/m',
		'web' => '/web'
	],
	'upload' => [
		'avatar' => '/uploads/avatar',
		'brand' => '/uploads/brand',
		'book' => '/uploads/book',
	]
]

在User的方法中,登录时将当前用户的登录信息赋值给 params[“user_info”],然后在编辑用户基本信息时,再从 params[“user_info”] 中取出当前登录用户的信息,但是取不出来了,一直报:string '' (length=0)

*UserController.php*

<?php
namespace app\modules\web\controllers;

use app\models\User;
use yii\base\Controller;

class UserController extends Controller{
    //login
    public function actionLogin(){
        if( \Yii::$app->request->isGet ){
			$this->layout = "login_index";
			return $this->render("login");
		}

        $login_name = trim( $this->post("login_name","" ));
		$login_pwd = trim( $this->post("login_pwd",""));

		$user_info = User::find()->where([ 'login_name' => $login_name ])->one();
		\Yii::$app->params['user_info'] = $user_info;//这里是正常的可以打印出当前登录用户的信息
    }
    
    //edit
    public function actionEdit(){
        //获取登录用户信息
		$user = \Yii::$app->params['user_info']; //这里就取不出来了,冒似显示的是params['user_info'] 中定义的空的字符串
		var_dump($user);
		if( \Yii::$app->request->isGet){
			//将当前用户信息传递到当前页面
			return $this->render("edit",[
				'info' => $user
			]);
		}
    }
}

老师,这是怎么回事呢?为什么保存进params[‘user_info’]的值却是取不出来?

正在回答

2回答

编程浪子 2019-08-04 23:35:33

你好

我给你举个例子

页面A 打开,里面自己设置了一个变量。当页面执行完毕,内部所有变量都会被系统回收


页面B打开,此时又是一个全新的过程。



0 回复 有任何疑惑可以回复我~
  • 提问者 E网飙风 #1
    可是,老师,这个变量是在 params 中储存的呢,是不是?
    回复 有任何疑惑可以回复我~ 2019-08-05 21:34:17
  • 提问者 E网飙风 #2
    那A页面难道不能把值传到B页面吗
    回复 有任何疑惑可以回复我~ 2019-08-05 21:36:22
  • 提问者 E网飙风 #3
    老师,为什么我这样做呢,是因为我按照教程,也能正常登录,正常储存cookie,但是我点击编辑用户信息时,却把cookie删除,直接退出了,不知道什么原因?困绕好久了。
    回复 有任何疑惑可以回复我~ 2019-08-05 22:00:11
编程浪子 2019-08-05 23:47:45

你好

我们课程的源码是这么写的,每次访问页面都会执行登陆验证的方法 所以在某个页面整个过程中 这个变量是存在的

https://img1.sycdn.imooc.com/szimg/5d484f8009ad66a016161282.jpg

0 回复 有任何疑惑可以回复我~
  • 提问者 E网飙风 #1
    老师,我是打印你红框上面的上面的if判断中检查,一直返回false,   geneAuthToken() ,对比检查返回的token尾部缺少一个uid:
    
    //统一生成加密字段 ,加密字符串 = md5( login_name + login_pwd + login_salt )
    	public function geneAuthToken( $user_info ){
    		return md5( "{$user_info['login_name']}-{$user_info['login_pwd']}-{$user_info['login_salt']}");
    	}
    
    我也不确定,把这个方法的返回值改掉就可以了。
    回复 有任何疑惑可以回复我~ 2019-08-06 00:14:59
  • 提问者 E网飙风 #2
    谢谢老师,辛苦了这么晚还在指导。
    回复 有任何疑惑可以回复我~ 2019-08-06 00:20:09
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号