2013-12-23 122 views
2

我有yii项目,Chrome会话丢失。 实施例: 配置在main.phpYii在重定向后丢失会话

'session' => array(
      'class' => 'CDbHttpSession', 
      'autoStart' => false, 
      'connectionID' => 'db', 
      'sessionTableName' => 'ph_YiiSession', 
      'autoCreateSessionTable' => false // for performance reasons 
     ), 

在启动控制器登录后我写在会话

Yii::app()->user->id = 100 

ID用户i之后重定向用户

$this->redirect(array('student/index'), true); 

但在索引动作我无法从会话中获取数据

echo Yii::app()->user->id; 

什么也不给。请帮帮忙,这个问题坠毁我的大脑已经

+0

你想做什么? Yii :: app() - > user-> id是如何与会话相关的? –

+0

请张贴您的身份验证码... –

+0

http://pastebin.com/bBV1J4XN – 6yt9Bka

回答

0

你应该尝试

'autoStart' => true, 
+0

我试过了,没有帮助 – 6yt9Bka

+0

可能这会帮助你。 http://php.refulz.com/configuring-session-in-yii-framework-cdbhttpsession/ –

+0

没有帮助,我看表ph_YiiSession并有1行,但在'数据'列没有。 – 6yt9Bka

0
Yii::app()->user->id = 100 

首先

您不能设置标识这样永久,可以在不同的工作页面。即使您将页面设置为ID,只要移至下一页,其数据就会丢失,并且会显示其默认值。所以如果你想改变Yii::app()->user->id包含的值,那么你将不得不重写getId()方法。

第二件事

如果你要保存的Id的会话,那么你应该使用Yii::app()->session['_myId']=Yii::app()->user->id; 然后你就可以得到它像

echo Yii::app()->session['_myId']; 

,并记住'autoStart' => TRUE,

+0

1.我以它为例来展示。 2.我已经做了(使用会话['_ myId']),不工作,在数据库中 - 什么都没有。 – 6yt9Bka

+0

你能告诉我如何在会话中保存数据 –

+0

例如:在站点控制器中我写了Yii :: app() - > session ['value'] ='12345';重定向到其他控制器后:echo Yii :: app() - > session ['value']; - 没什么页面,没有在分贝 – 6yt9Bka

0

什么你做错了,肯定是在UserIdentity类。从Yii::app()->user->id设置和检索会话数据的最佳方法是覆盖UserIdentity类中的getId()方法。

例如,假设您有一个名为'User'的表,它包含:id,username,password。

因此,使UserIdentity类是这样的:

<?php 

/** 
* UserIdentity represents the data needed to identity a user. 
* It contains the authentication method that checks if the provided 
* data can identity the user. 
*/ 
class UserIdentity extends CUserIdentity 
{ 

    private $_id; 

    public function authenticate() 
    { 
     $user = User::model()->find('LOWER(username)=?',array(strtolower($this->username))); 
     if($user===null){ 
      $this->errorCode=self::ERROR_USERNAME_INVALID; 

     }else if($user->password !== crypt($this->password,$user->password)){ 
      $this->errorCode = self::ERROR_PASSWORD_INVALID; 
     } 
     else{ 
      $this->_id = $user->id; 
      $this->username = $user->username; 
      $this->errorCode = self::ERROR_NONE; 
     } 
     return $this->errorCode === self::ERROR_NONE; 
    } 

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

一旦你这样做,你应该能够使用的Yii ::应用程序() - >用户> ID和获取会话ID代码中的任何地方。

希望这有助于。

P.S>我也做了一个基地的应用程序,所有这些都已完成。您可以查看:https://github.com/sankalpsingha/yii-base-app它可能会帮助你。

+0

我的UserIdentity:http://pastebin.com/vcELsG2k,THX但没有帮助。 – 6yt9Bka

+0

在过程中我发现文件会话存储(我从CDbHttpSession更改为CHttpSession),但其中的数据不是。在这个环境中存在使用会话的其他应用程序并且没问题。这对我来说很神奇。 – 6yt9Bka