CDbHttpSession
을 확장하고 destroySession($id)
메서드를 덮어 써야합니다. 거기에 코드를 추가하고 항목을 삭제하십시오.
구성 YII는 설정/main.php에 자신의 대신 세션 클래스를 사용합니다 : 나는 별도의 테이블이 작업을 수행하지 않을 그러나
'session' => array(
'autoStart' => true,
'class' => 'application.components.<your session class name>',
'connectionID' => 'db',
'sessionTableName' => 'session',
'autoCreateSessionTable' => false,
'timeout' => 3600, // 60 min
),
, 그냥 YiiSession 테이블에 일부 필드를 추가합니다. 그게 내가 한 일이고 꽤 잘 돌아 간다.
편집 : 당신은 protected/components
에 MyDbHttpSession.php
라는 이름의 파일을 작성해야합니다. 이 파일에서 은과 같이 CDbHttpSession을 확장 :
class MyDbHttpSession extends CDbHttpSession
{
protected function createSessionTable($db, $tableName)
{
// basically this is a copy of CDbHttpSession
$db->createCommand()->createTable($tableName, array(
'id' => 'CHAR(32) PRIMARY KEY',
'expire' => 'integer',
'data' => $blob,
// your additional fields
'idUser' => 'INT(10) NULL',
'online' => 'TINYINT(1)',
// more of your fields here if you have
));
}
// this sets the user ID by session ID
public function setIdUser($idUser)
{
$db = $this->getDbConnection();
$db->setActive(true);
$db->createCommand()->update($this->sessionTableName, array('idUser' => (int) $idUser),
'id=:id', array(':id' => $this->sessionId)
);
}
// and this sets the online status, pass true or false to $online
public function setOnline($online)
{
$db = $this->getDbConnection();
$db->setActive(true);
$db->createCommand()->update($this->sessionTableName, array('online' => (int) $online),
'id=:id', array(':id' => $this->sessionId)
);
}
}
설정 YII 내가 위에 쓴 것처럼이 자신의 것 대신 세션 클래스를 사용할 수 있습니다.
이미 WebUser
클래스가 있어야합니다. 그렇지 않다면 protected/components
에 하나를 만들고 CWebUser
을 확장하십시오. Yii::app()->session->setOnline(true);
또는 Yii::app()->session->setOnline(false);
난 당신이 문구 질문을 더 나은 수 생각이 YII에있는 곳에서
당신이 할 수있는 사용 :이 클래스에서 는 방법
afterLogin
를 추가합니다. "그러나 사용자가 로그 아웃 할 때 사용자와 관련된 세션이 삭제되었음을 이해하지 못합니다." 일반적으로 세션 삭제 (삭제)는 로그 아웃에 포함되어 있으므로 완벽하게 이해할 수 있습니다. SQL 관점에서 이야기하고 있지만 다시 말해야 할 필요가 있습니다. – Jonast92안녕하세요 Jonast92, 나는 그것이 user_session (테이블이 나에 의해 생성됨)에서 삭제되었지만 YiiSession (테이블은 Yii 설정의 일부 임)에없는 것을 이해하지 못합니다. 그리고 그것을 삭제하는 메커니즘은 무엇입니까? – ethereal1m