亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频

EasySwoole Session 組件

由于在 Swoole 協程下,php 自帶的 session 函數是不能使用的。為此,EasySwoole 提供了獨立的 session 組件,實現 phpsession 功能。

Session 組件目前最新穩定版本為 3.x。針對 2.x 版本的組件使用文檔請看 Session 2.x,其他舊版本的組件使用文檔請以 Github 為準。

組件要求

  • php: >=7.1.0
  • easyswoole/spl: ^1.3
  • easyswoole/utility: ^1.1
  • easyswoole/component: ^2.1

安裝方法

從框架 3.4.4 版本開始,框架默認自帶該組件,不用再次再裝,其他版本請使用 composer 安裝,安裝方法如下所示。

composer require easyswoole/session=3.x

倉庫地址

easyswoole/session=3.x

基本使用

注冊 session handler

使用 session 前,需要先注冊 session handler。接下來的示例使用的 session handlerEasySwoole 內置的 session handler,開箱即用。

注冊步驟如下:

  1. 首先我們定義一個 session 工具類繼承自 session 組件的 \EasySwoole\EasySwoole\Session 類。用戶可以自行定義類繼承并實現。下面為提供的一個參考工具類。

新增 App\Tools\Session.php,內容如下:

<?php

namespace App\Tools;

use EasySwoole\Component\Singleton;

class Session extends \EasySwoole\Session\Session
{
    use Singleton;
}
  1. 注冊 session handler。修改 EasySwoole 全局 event 文件(即框架根目錄的 EasySwooleEvent.php 文件),在 mainServerCreate 全局事件和 HTTP 的 全局 HTTP_GLOBAL_ON_REQUEST 事件中注冊 session handler

具體實現代碼如下:

<?php

namespace EasySwoole\EasySwoole;

use App\Tools\Session;
use EasySwoole\Component\Di;
use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\EasySwoole\Swoole\EventRegister;
use EasySwoole\Http\Request;
use EasySwoole\Http\Response;
use EasySwoole\Session\FileSession;
use EasySwoole\Utility\Random;

class EasySwooleEvent implements Event
{
    public static function initialize()
    {
        date_default_timezone_set('Asia/Shanghai');

        // 可以自己實現一個標準的 session handler,下面使用組件內置實現的 session handler
        // 基于文件存儲,傳入 EASYSWOOLE_TEMP_DIR . '/Session' 目錄作為 session 數據文件存儲位置
        Session::getInstance(new FileSession(EASYSWOOLE_TEMP_DIR . '/Session'));

        Di::getInstance()->set(SysConst::HTTP_GLOBAL_ON_REQUEST, function (Request $request, Response $response) {
            // TODO: 注冊 HTTP_GLOBAL_ON_REQUEST 回調,相當于原來的 onRequest 事件

            // 獲取客戶端 Cookie 中 easy_session 參數
            $sessionId = $request->getCookieParams('easy_session');
            if (!$sessionId) {
                $sessionId = Random::character(32); // 生成 sessionId
                // 設置向客戶端響應 Cookie 中 easy_session 參數
                $response->setCookie('easy_session', $sessionId);
            }

            // 存儲 sessionId 方便調用,也可以通過其它方式存儲
            $request->withAttribute('easy_session', $sessionId);

            Session::getInstance()->create($sessionId); // 創建并返回該 sessionId 的 context
        });

        Di::getInstance()->set(SysConst::HTTP_GLOBAL_AFTER_REQUEST, function (Request $request, Response $response) {
            // TODO: 注冊 HTTP_GLOBAL_AFTER_REQUEST 回調,相當于原來的 afterRequest 事件

            // session 數據落地【必不可少這一步】
            Session::getInstance()->close($request->getAttribute('easy_session'));

            // gc 會清除所有 session,切勿操作
            // Session::getInstance()->gc(time());
        });
    }

    public static function mainServerCreate(EventRegister $register)
    {

    }
}

EasySwoole 中使用 session

注冊 session handler 之后,我們就可以在 EasySwoole 控制器 的任意位置使用了。

簡單使用示例代碼如下:

<?php

namespace App\HttpController;

use EasySwoole\Http\AbstractInterface\Controller;
use EasySwoole\Session\Context;

class Session extends Controller
{
    protected function session(): ?Context
    {
        // 封裝一個方法,方便我們快速獲取 session context
        $sessionId = $this->request()->getAttribute('easy_session');
        return \App\Tools\Session::getInstance()->create($sessionId);
    }

    // 將值保存在 session 中
    public function set()
    {
        // $this->session()->set('key', 'value');
        // 把 'test_session_key' 作為鍵,time() 的值作為值,保存在 session 中
        $this->session()->set('test_session_key', time());

        // 響應客戶端
        $this->writeJson(200, 'success!');
    }

    // 獲取 session 中的值
    public function get()
    {
        // $this->session()->get('key');
        // 從 session 中獲取 key 為 'test_session_key' 的值
        $ret = $this->session()->get('test_session_key');

        // 響應客戶端
        $this->writeJson(200, $ret);
    }

    // 獲取 session 中所有數據
    public function all()
    {
        // 獲取 session 中所有數據
        $ret = $this->session()->allContext();

        // 響應客戶端
        $this->writeJson(200, $ret);
    }

    // 刪除 session 中的值
    public function del()
    {
        // $this->session()->del('key');
        // 刪除 session 中 key 為 'test_session_key' 的值
        $this->session()->del('test_session_key');

        // 再次獲取 session 中所有數據并響應客戶端
        $this->writeJson(200, $this->session()->allContext());
    }

    // 清空 session 中所有數據
    public function flush()
    {
        // 清空 session 中所有數據
        $this->session()->flush();

        // 再次獲取 session 中所有數據并響應客戶端
        $this->writeJson(200, $this->session()->allContext());
    }

    // 重新設置(覆蓋) session 中的數據
    public function setData()
    {
        // 重新設置(覆蓋) session 中的數據
        $ret = $this->session()->setData([
            'test_session_key' => 1,
            'test_session_key1' => 2
        ]);

        // 再次獲取 session 中所有數據并響應給客戶端
        $this->writeJson(200, $ret->allContext());
    }
}

然后訪問 http://127.0.0.1:9501/session/set (示例請求地址)就可以進行測試設置 session,訪問 http://127.0.0.1:9501/session/flush (示例請求地址)就可以清空所有 session 數據。其他示例請用戶自行測試。

亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频
  • <kbd id="eqi2k"><code id="eqi2k"></code></kbd><cite id="eqi2k"><tbody id="eqi2k"></tbody></cite>
    久久99精品久久久久久三级 | 国产私拍一区| 五月天国产一区| 激情久久婷婷| 日本在线播放不卡| 欧美二级三级| 奶水喷射视频一区| 亚洲一区二区三区精品在线观看| 国色天香一区二区| 在线观看一区欧美| 蜜桃久久精品乱码一区二区 | 国产一区免费视频| 亚洲人人精品| 在线码字幕一区| 亚洲午夜精品久久久久久app| 久久一区中文字幕| 欧美凹凸一区二区三区视频| 欧美福利视频| 日韩精品不卡| 国产伦精品一区| 亚洲欧洲精品一区二区| 蜜桃久久精品乱码一区二区 | 久久精品二区| 好吊色欧美一区二区三区四区 | www.成人av| 国产精品视频久久一区| 欧美网站在线| 一区二区三区四区国产| 五码日韩精品一区二区三区视频| 成人av中文| 国产精品一区而去| 国产精品午夜av在线| 97碰碰视频| 精品国产中文字幕| 狠狠久久综合婷婷不卡| 久久亚洲免费| 日本最新一区二区三区视频观看| 麻豆传媒一区二区| 日韩成人av电影在线| 亚洲国产欧美一区二区三区不卡| 欧美另类一区| 激情综合在线| 久久亚洲午夜电影| 亚洲影院免费| 亚洲精品美女久久7777777| 亚洲小说欧美另类婷婷| 九九九九精品| 精品国产一区二区三区四区vr| 蜜桃av噜噜一区二区三| 欧美日韩精品久久| 久久av免费一区| 国产伦精品一区二区三区高清版| 一区二区三区观看| 蜜桃久久精品乱码一区二区 | 亚洲无线视频| 一区二区三视频| 欧美影视一区二区| 成人av中文| 久久婷婷丁香| 国产精品一区二区三区免费观看| 女人色偷偷aa久久天堂| 无码免费一区二区三区免费播放| 狠狠色狠狠色综合人人| 147欧美人体大胆444| 国产日韩免费| 亚洲人成免费| 一本久道久久综合婷婷鲸鱼| 欧美日本国产| 中文字幕一区二区中文字幕| 日韩一区国产在线观看| 精品免费视频123区| 国产精品yjizz| av成人观看| 国产富婆一区二区三区| 999视频在线免费观看| 狂野欧美一区| 成人动漫视频在线观看完整版 | 国产日韩欧美一区二区| 亚洲性图久久| 亚洲精品视频一区二区三区| 伊人蜜桃色噜噜激情综合| 精品成人在线| 亚洲一区二区毛片| 亚洲中字黄色| 97久久天天综合色天天综合色hd| wwwxx欧美| 国偷自产av一区二区三区小尤奈| 国新精品乱码一区二区三区18| 国产一区国产精品| 欧美精品七区| 中文网丁香综合网| 韩日成人在线| 国产精品视频免费一区| 久久精品亚洲| 精品国产91亚洲一区二区三区www| 好吊色欧美一区二区三区视频| 免费在线成人av电影| 午夜精品区一区二区三| 一本一道久久a久久综合精品| 正在播放一区| 亚洲免费成人| 久久中文在线| 奇米精品在线| 欧美午夜一区| 91丨九色丨国产| 鲁丝一区鲁丝二区鲁丝三区| 亚洲一区三区| 国产亚洲欧美一区二区三区| ts人妖另类在线| 欧美一区二区三区在线免费观看| 中文字幕中文字幕一区三区| 99pao成人国产永久免费视频| 99视频在线| 亚洲精品国产精品国自产| 精品成人一区| 精品高清视频| 狠狠色丁香久久综合频道| 久久这里只有| 一区在线电影| 久久亚洲影院| 亚洲日本精品一区| 久久午夜激情| 亚洲春色在线视频| 亚洲男人影院| 少妇精品久久久久久久久久| 在线亚洲伦理| 色姑娘综合网| 六月丁香综合| 一区二区不卡视频| 久久久久se| 欧美一区二区三区久久精品茉莉花| 亚洲一区日韩在线| 日韩中文一区| 91精品国产综合久久久久久丝袜| 天堂精品一区二区三区| 校园春色综合网| 午夜精品久久| 国产免费一区二区三区| 136国产福利精品导航网址| 精品毛片久久久久久| 夜久久久久久| 亚洲人成网站在线观看播放| 999精品视频一区二区三区| 欧美午夜精品| 久久久综合香蕉尹人综合网| 国产欧美午夜| 欧美精品大片| 精品国产乱码久久久久| 亚洲免费综合| 国产综合自拍| 亚洲精品国产系列| 国产伦精品一区二区三区视频孕妇| 亚洲高清免费| 亚洲欧洲在线一区| 久久精品五月婷婷| 久久综合给合久久狠狠色| 亚洲网址在线| 欧美另类高清视频在线| 欧美国产二区| 国产女主播一区二区| 亚洲一区二区高清视频| 国内精品**久久毛片app| 日韩av在线电影观看| 精品国产二区在线| av一本久道久久波多野结衣| 国产精品日韩久久久| 激情偷拍久久| 欧美粗暴jizz性欧美20| 亚洲黄色一区二区三区| 久久人人九九| 国产亚洲精品美女久久久m| 亚洲尤物在线| 国产伦精品一区二区三区视频黑人| 国产精品99一区二区| 亚洲一区二区精品在线观看| 欧美日本韩国一区二区三区| 国产一区免费| 久久久久久草| 精品免费二区三区三区高中清不卡| 99国产高清| 成人片在线免费看| 91免费版黄色| 国产精品日本一区二区| 91青青草免费观看| av电影成人| 国产亚洲欧美一区二区三区| 99视频国产精品免费观看| av蓝导航精品导航| 成人动漫在线观看视频 | 国产精品日韩欧美一区二区| 成人做爰66片免费看网站| 高清日韩一区| 久99久视频| 日本一区二区在线视频| 亚洲春色在线视频| 午夜日本精品| 一区二区精品国产| 每日更新成人在线视频| 国产精品乱子乱xxxx| 蜜桃成人免费视频|