cds-wh 2011-04-20 10:24:48 4449次浏览 9条回复 0 0 0

我想将一些信息写进cookie中,用什么方法可以实现。 情况:登陆时记录了用户的email,需要在欢迎页面显示。 如果用setState,应该是记录到了session中,没有记录到cookie中。如果用户选了自动登陆,这时email信息找不到,报错。 请问这种问题一般怎么解决,是不是yii中有什么可以设置的啊。

  • 回复于 2011-04-20 10:27 举报

    http://www.yiichina.com/topic/85
    看一下上面的帖子。

  • 回复于 2011-04-20 10:28 举报

    不是很明白你要问的问题,我给你找了yii中cookie的用法,你看看
    [attach]96[/attach]

  • 回复于 2011-04-20 10:46 举报
    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;
    }
    

    先谢谢两位的回复,可能我没说明白,上面是我的登陆代码,写在CFormModel类中,当用户登录时选中了“记住登陆状态”单选框,下次访问时就不用再登陆,而且直接在页面用Yii::app()->user->name就可得到登录账户名,现在我还想让email也是这种可以直接取出来,不知道可不可以,上面你们说的cookie做法是重新再写个cookie,可能和我的想法有点差异。

  • 回复于 2011-04-20 13:08 举报

    谁能帮忙说下啊,这样的需求一般怎么做的啊?:)

  • 回复于 2011-04-20 13:21 举报

    就用上面的方法做啊!

  • 回复于 2011-04-20 13:47 举报

    你到底想用state还是cookie还是session?

  • 回复于 2011-04-20 17:39 举报

    最后我还是直接根据id到数据库里查了下。过程:
    1、登陆;
    2、查看Yii::app()->user->email是否定义;
    3、如果没定义,根据Yii::app()->user->id在库中找到对应的email,然后Yii::app()->user->setState;
    4、以后如果用email的时候,直接Yii::app()->user->email就行了。
    如此解决了自动登录时记录email数据的功能。最后感谢以上朋友的回复!

  • 回复于 2011-04-20 18:01 举报

    这样做也行
    还可以在 userIdentity 中搞定
    当userIdentity 的authenticate方法验证通过了,就setState('email',$email)
    以后可以通过Yii::app()->user->getState('email')来获取

  • 回复于 2011-04-21 10:45 举报

    我也想了在userIdentity 中做的方法,但是如果用户直接拿个地址去访问受限页面,不经过登陆页,他的cookie有,所以他是有权限访问的,这时就不会访问userIdentity,所以也不会触发Yii::app()->user->getState('email'),导致后面页面调用出错。还是放到用这个数据那个页面好。

您需要登录后才可以回复。登录 | 立即注册