2012-10-11 55 views
1

我試圖實現一個登錄方案,在該方案中,我保持計數用戶嘗試的嘗試次數,這是出於安全原因。我的代碼是:在第一個轉儲以及回聲我得到嘗試的正確數量:「嘗試未定義索引:」用於計數登錄嘗試的會話變量

然而

{ 
    ob_start(); 
    $_SESSION['attempts'] = 0; 
    $_SESSION['sleep'] = 0; 
    $_SESSION['ip']=$this->get_ip_address() ; 
    $login = new User('login'); 
    // renders the view file 'protected/views/site/index.php' 
    // using the default layout 'protected/views/layouts/main.php' 

    if(isset($_POST['yt0'])) 
    { 
      $login->Username = ($_POST['User']['Username']); 
      $salt = $login->getSaltByUsername($login->Username) ; 
      $login->SecretCode = $this->hasher($login->Username,($_POST['User']['SecretCode']),$salt); 
      var_dump($_SESSION) ; /*First Dump , gives all session variables correctly*/ 
      echo $_SESSION['attempts'] ; 
      Yii::app()->user->setState('attempts', $_SESSION['attempts']++); 

      var_dump($_SESSION) ; 

我收到通知PHP。 我在這裏做錯了什麼?

+0

你顯示的代碼非常有限,以至於很難知道它可能是什麼......如果你改變setState('attempt',改爲其他的東西?改爲「試」而不是? – rain01

+0

同樣的錯誤,將它改爲'試試' –

+0

我建議使用cookie而不是會話,例如:如果你想在n次登錄嘗試後顯示驗證碼,如果使用會話用戶可以簡單地關閉瀏覽器來關閉會話,並再次打開頁面,並嘗試登錄而不顯示驗證碼。 –

回答

1

我認爲你應該使用的$_SESSIONCHttpSession代替

$session=new CHttpSession; 
$session->open(); 

$session['attempts'] = 0; 
$session['sleep'] = 0; 
$session['ip']=$this->get_ip_address(); 

我從來沒有在任何我的Yii項目的使用$_SESSION