Rieccomi, vi copio le funzioni:
[size="4"]generateSession($duration, $user)[/size]
public function generateSession($duration, $user)
{
// set session variable
$this->browser = (!empty($_SERVER['HTTP_USER_AGENT'])) ? htmlspecialchars((string) $_SERVER['HTTP_USER_AGENT']) : '';
$this->referer = (!empty($_SERVER['HTTP_REFERER'])) ? htmlspecialchars((string) $_SERVER['HTTP_REFERER']) : '';
$this->forwarded_for = (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) ? htmlspecialchars((string) $_SERVER['HTTP_X_FORWARDED_FOR']) : '';
$this->ip = (!empty($_SERVER['REMOTE_ADDR'])) ? (string) $_SERVER['REMOTE_ADDR'] : '';
$this->ip = preg_replace('# {2,}#', ' ', str_replace(',', ' ', $this->ip));
$user_id=$user->id;
$admin=0;
$current_user=User::model()->findByAttributes(array('user_id'=>$user_id));
$user_group=$current_user->group_id;
if($user_group=='5') $admin=1;
else $admin=0;
$time=time();
$session_id=Yii::app()->session->getSessionID();
Yii::app()->request->cookies[$this->cookieName] = new CHttpCookie($this->cookieName, $session_id);
$cookie = new CHttpCookie($this->cookieName, $session_id);
$cookie->expire = $duration;
Yii::app()->request->cookies[$this->cookieName] = $cookie;
Yii::app()->request->cookies[$this->cookieNameU] = new CHttpCookie($this->cookieNameU, $user_id);
$expire=time()+$this->getTimeout();
$db=Yii::app()->db;
$sql="SELECT session_id FROM {$this->sessionTableName} WHERE session_id=:id";
if($db->createCommand($sql)->bindValue(':id',$session_id)->queryScalar()===false)
$sql="INSERT INTO {$this->sessionTableName} (`session_id`, `session_user_id`, `session_forum_id`, `session_last_visit`, `session_start`, `session_time`, `session_ip`, `session_browser`, `session_forwarded_for`, `session_page`, `session_viewonline`, `session_autologin`, `session_admin`)
VALUES (:id, '$user_id', '0', '$expire', '$time', '$time', '$this->ip', '$this->browser', '$this->forwarded_for', 'index.php', '1', '', '$admin')";
else
$sql="UPDATE {$this->sessionTableName} SET session_last_visit=$expire WHERE session_id=:id";
$db->createCommand($sql)->bindValue(':id',$session_id)->execute();
return true;
}
La richiamo dal LoginForm nella funzione login() se l’autenticazione e’ andata a buon fine:
if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
{
$duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
Yii::app()->user->login($this->_identity,$duration);
$session= new phpBBSession();
$session->generateSession($duration, $this->_identity);
return true;
}
In fine:
[size="4"]destroySession()[/size]
public function destroySession()
{
$session_id=Yii::app()->request->cookies[$this->cookieName]->value;
$sql="DELETE FROM {$this->sessionTableName} WHERE session_id=:id";
$db=Yii::app()->db;
$db->createCommand($sql)->bindValue(':id',$session_id)->execute();
unset(Yii::app()->request->cookies[$this->cookieName]);
return true;
}
La richiamo all’interno del controller SiteController nella funzione actionLogout()
public function actionLogout()
{
$session=new phpBBSession();
$session->destroySession();
Yii::app()->user->logout();
$this->redirect(Yii::app()->homeUrl);
}