1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/talent518-threadtask

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
Session.php 3.6 КБ
Копировать Редактировать Исходные данные Просмотреть построчно История
阿宝 Отправлено 4 лет назад 4ffdad1
<?php
namespace app\threadtask;
use yii\base\Component;
use yii\web\Cookie;
class Session extends Component implements \IteratorAggregate, \ArrayAccess, \Countable {
/**
* @var resource
*/
private $var, $flash;
public $expire = 7200;
/**
* @var string
*/
public $name = 'PHPSESSID';
public $flashParam = '__flash';
private $_id;
public function init() {
$cookie = \Yii::$app->request->cookies->get($this->name);
if(!$cookie || !$cookie->value) {
$this->regenerateID();
} else {
$this->setId($cookie->value);
}
}
public function open() {
}
public function getHasSessionId() {
return \Yii::$app->request->cookies->has($this->name);
}
public function regenerateID(bool $deleteOldSession=false) {
if($deleteOldSession) $this->destroy();
$this->setId(md5(random_bytes(16)));
}
public function getId() {
return $this->_id;
}
public function setId($id) {
if($this->_id && $id !== $this->_id) {
$this->destroy();
}
$this->_id = $id;
$cookie = new Cookie();
$cookie->name = $this->name;
$cookie->value = $id;
$cookie->expire = $this->expire + time();
\Yii::$app->response->cookies->add($cookie);
$this->var = ts_var_declare($cookie->value);
ts_var_expire($this->var, $cookie->expire);
$this->flash = ts_var_declare($this->flashParam, $this->var);
}
public function getIsActive() {
return true;
}
public function offsetGet($offset) {
return ts_var_get($this->var, $offset);
}
public function getIterator() {
return new \ArrayIterator(ts_var_get($this->var));
}
public function offsetExists($offset) {
return ts_var_exists($this->var, $offset);
}
public function offsetUnset($offset) {
return ts_var_del($this->var, $offset);
}
public function count() {
return ts_var_count($this->var);
}
public function getCount() {
return ts_var_count($this->var);
}
public function offsetSet($offset, $value) {
return ts_var_set($this->var, $offset, $value);
}
public function has($key) {
return ts_var_exists($this->var, $key);
}
public function get($key, $def = null) {
return ts_var_exists($this->var, $key) ? ts_var_get($this->var, $key) : $def;
}
public function set($key, $value) {
return ts_var_set($this->var, $key, $value);
}
public function remove($key) {
return ts_var_get($this->var, $key, true);
}
public function removeAll() {
ts_var_clean($this->var);
$this->flash = ts_var_declare($this->flashParam, $this->var);
}
public function getAllFlashes($delete = false) {
return ts_var_get($this->flash, null, $delete) ?: [];
}
public function hasFlash($key) {
return ts_var_exists($this->flash, $key);
}
public function getFlash($key, $defaultValue = null, $delete = true) {
return ts_var_exists($this->flash, $key) ? ts_var_get($this->flash, $key, $delete) : $defaultValue;
}
public function addFlash($key, $value = true, $removeAfterAccess = true) {
if(ts_var_exists($this->flash, $key)) {
return ts_var_inc($this->flash, $key, $value);
} else {
return ts_var_set($this->flash, $key, [$value]);
}
}
public function setFlash($key, $value = true, $removeAfterAccess = true) {
return ts_var_set($this->flash, $key, $value);
}
public function removeFlash($key) {
return ts_var_get($this->flash, $key, true);
}
public function destroy() {
\Yii::$app->response->cookies->remove($this->name);
$cookie = new Cookie();
$cookie->name = $this->name;
$cookie->value = null;
$cookie->expire = -1;
\Yii::$app->response->cookies->add($cookie);
$ret = ts_var_del(ts_var_declare(null), $this->_id);
$this->_id = null;
return $ret;
}
}

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/talent518-threadtask.git
git@gitlife.ru:oschina-mirror/talent518-threadtask.git
oschina-mirror
talent518-threadtask
talent518-threadtask
v1.70