提交 41332acf 编写于 作者: T Terry

session services,新增SessionRedis方式的实现

上级 ab350636
......@@ -18,7 +18,7 @@ return [
'updateTimeLimit' => 600,
// 【不可以设置phpsession】默认为php session,只有当 \Yii::$app->user->enableSession == false时,下面的设置才有效。
// 存储引擎 mongodb mysqldb redis
'storage' => 'SessionMysqldb',
'storage' => 'SessionRedis', //'SessionMysqldb',
//'childService' => [
......
<?php
/**
* FecShop file.
*
* @link http://www.fecshop.com/
* @copyright Copyright (c) 2016 FecShop Software LLC
* @license http://www.fecshop.com/license/
*/
namespace fecshop\models\redis;
use yii\redis\ActiveRecord;
/**
* @author Terry Zhao <2358269014@qq.com>
* @since 1.0
*/
class SessionStorage extends ActiveRecord
{
public function attributes()
{
return [
'id', 'session_uuid',
'session_key', 'session_value',
'session_timeout','session_updated_at'
];
}
/**
* relations can not be defined via a table as there are not tables in redis. You can only define relations via other records.
*/
}
......@@ -99,7 +99,7 @@ class Order extends Service
$this->status_processing => $this->status_processing,
$this->status_dispatched => $this->status_dispatched,
$this->status_refunded => $this->status_refunded,
$this->status_complete => $this->status_complete,
$this->status_completed => $this->status_completed,
];
}
......
<?php
/**
* FecShop file.
*
* @link http://www.fecshop.com/
* @copyright Copyright (c) 2016 FecShop Software LLC
* @license http://www.fecshop.com/license/
*/
namespace fecshop\services\session;
use Yii;
use fecshop\services\Service;
//use fecshop\models\mysqldb\SessionStorage;
/**
* redis session services
* @author Terry Zhao <2358269014@qq.com>
* @since 1.0
*/
class SessionRedis extends Service implements SessionInterface
{
protected $_sessionModelName = '\fecshop\models\redis\SessionStorage';
protected $_sessionModel;
public function init(){
parent::init();
list($this->_sessionModelName,$this->_sessionModel) = \Yii::mapGet($this->_sessionModelName);
}
public function set($key,$val,$timeout){
$uuid = Yii::$service->session->getUUID();
$one = $this->_sessionModel->find()->where([
'session_uuid' => $uuid,
'session_key' => $key,
])->one();
if(!$one['id']){
$one = new $this->_sessionModelName();
$one['session_uuid'] = $uuid;
$one['session_key'] = $key;
}
$one['session_value'] = $val;
$one['session_timeout'] = $timeout;
$one['session_updated_at'] = time();
$one->save();
return true;
}
public function get($key,$reflush){
$uuid = Yii::$service->session->getUUID();
$one = $this->_sessionModel->find()->where([
'session_uuid' => $uuid,
'session_key' => $key,
])->one();
if($one['id']){
$timeout = $one['session_timeout'];
$updated_at = $one['session_updated_at'];
if($updated_at + $timeout > time()){
if($reflush){
$one['session_updated_at'] = time();
$one->save();
}
return $one['session_value'];
}
}
}
public function remove($key){
$uuid = Yii::$service->session->getUUID();
$one = $this->_sessionModel->find()->where([
'session_uuid' => $uuid,
'session_key' => $key,
])->one();
if($one['id']){
$one->delete();
return true;
}
}
/**
*
*/
public function destroy(){
if(!Yii::$app->user->isGuest){
$identity = Yii::$app->user->identity;
$identity->access_token = '';
$identity->access_token_created_at = null;
$identity->save();
}
$uuid = Yii::$service->session->getUUID();
$result = $this->_sessionModel->deleteAll([
'session_uuid' => $uuid,
]);
$access_token_created_at = $identity->access_token_created_at;
$timeout = Yii::$service->session->timeout;
if($access_token_created_at + $timeout > time()){
return $accessToken;
}
return true;
}
public function setFlash($key,$val,$timeout){
return $this->set($key,$val,$timeout);
}
public function getFlash($key){
$uuid = Yii::$service->session->getUUID();
$one = $this->_sessionModel->find()->where([
'session_uuid' => $uuid,
'session_key' => $key,
])->one();
if($one['id']){
$timeout = $one['session_timeout'];
$updated_at = $one['session_updated_at'];
if($updated_at + $timeout > time()){
$val = $one['session_value'];
$one->delete();
return $val;
}
}
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册