easyswoole - 基于swoole扩展实现的一款高性能php框架

EasySwoole Session 組件

由于在 Swoole 協(xié)程下,php 自帶的 session 函數(shù)是不能使用的。為此,EasySwoole 提供了獨(dú)立的 session 組件,實(shí)現(xiàn) phpsession 功能。

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

組件要求

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

安裝方法

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

composer require easyswoole/session=3.x

倉庫地址

easyswoole/session=3.x

基本使用

注冊 session handler

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

注冊步驟如下:

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

新增 App\Tools\Session.php,內(nèi)容如下:

<?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

具體實(shí)現(xiàn)代碼如下:

<?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');

        // 可以自己實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的 session handler,下面使用組件內(nèi)置實(shí)現(xiàn)的 session handler
        // 基于文件存儲,傳入 EASYSWOOLE_TEMP_DIR . '/Session' 目錄作為 session 數(shù)據(jù)文件存儲位置
        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 回調(diào),相當(dāng)于原來的 onRequest 事件

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

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

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

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

            // session 數(shù)據(jù)落地【必不可少這一步】
            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
    {
        // 封裝一個(gè)方法,方便我們快速獲取 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());

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

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

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

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

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

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

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

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

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

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

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

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

主站蜘蛛池模板: 浙江三龙通用机械有限公司 圆丝机,拉丝机,复合机 | 洗地机,洗地机价格,扫地机,工业吸尘器,手推式洗地机,驾驶式洗地机,北京洗地机【北京高美环保科技有限公司】 | 友信京泰-操作台-调度台-控制台-监控台定制厂家 | 雾度计-雾度仪-透光率测试仪-3nh品牌雾度仪生产厂家 | 精细筛-振动筛-滚筒筛-摇摆筛-平面回转筛-筛分机械设备-新乡德科筛分机械公司 | 双螺杆挤压膨化设备_挤压熟化设备_烘干设备_油炸设备及喷涂调味设备-山东铭本机械科技公司 | 全降解塑料厂家_淋膜_秸秆_手机壳_气泡袋_牙刷牙线_GRS可回收包装材料-东莞全球环保科技有限公司 | 全自动热敷贴(袋)温度特性检测仪-武汉伊特仪器有限公司 | 南通市通州区锦标建材有限公司-排水板,塑料排水板,植草格厂家 | 无线对讲机系统-中继台-山区隧道信号覆盖-贝亚特| 聊城钢管厂,无缝钢管厂家-山东旺耀金属制品有限公司 | 激光清洗机_激光除锈机_激光焊接机 - 上海锡昊激光科技有限公司 激光切管机_等离子切管机_相贯线切管机厂家|服务为先-山东美峰智能设备有限公司 | 文君阁-提供生活百科,日常生活健康小常识,生活小窍门,百科知识大全 | 呼吸家官网|肺功能检测仪生产厂家|国产肺功能仪知名品牌|肺功能检测仪|肺功能测试仪|婴幼儿肺功能仪|弥散残气肺功能仪|肺功能测试系统|广州红象医疗科技有限公司|便携式肺功能仪|大肺功能仪|呼吸康复一体机|儿童肺功能仪|肺活量计|医用简易肺功能仪|呼吸康复系统|肺功能仪|弥散肺功能仪(大肺)|便携式肺功能检测仪|肺康复|呼吸肌力测定肺功能仪|肺功能测定仪|呼吸神经肌肉刺激仪|便携式肺功能 | 旋转补偿器-专注套筒三维球形补偿器定制生产厂家-伸缩接头价格_巩义市新华丰管道设备有限公司 | 蒸汽发生器厂家-电加热蒸汽发生器-免办证/免报批/免报检电锅炉-上海电热水锅炉-上海艾亚锅炉有限公司 | 学校直饮水机-反渗透纯水设备-家用净水器厂家-广州颖圣能源设备 学校洗碗机-郑州洗碗机厂家-商用洗碗机-郑州旭申环保科技有限公司 | 交通标志牌-交通标牌-铝圆牌-铝三角片-铝滑槽-公路警示指示牌-方牌-高速道路反光牌毛坯-交通设施安全警示标识牌-路名指示限速限高牌-厂家加工交通标牌铝板半成品毛坯-上海吕盟铝业有限公司 | 联系我们果博福布斯公司客服电话17787888880[河南河北区] | 浙江健朗-舒华跑步机|公园运动器材|商用健身设备|户外健身器材厂家 | 微机继电保护测试仪,单相继电保护测试仪,三相继电保护测试仪,六相继电保护测试仪,介质损耗测试仪,氧化锌避雷器测试仪,无线核相仪-扬州豪泰电力科技有限公司 | 陶瓷靶材_氧化铌靶材_合金靶材_专注河北氧化铌靶材批发-河北东同光电科技有限公司 | 沈阳资质代办_代办建筑资质「快」-【华廷元】沈阳代办公司首页- 沈阳机电一体化电热锅炉_沈阳蓄热式电锅炉_沈阳壁挂式电锅炉【沈阳远鹏电热供水设备工程安装有限公司】 | 小型环境空气质量连续监测系统-烟气排放连续监测仪(碳排放)-青岛明德环保仪器有限公司 | 洒水车|冷藏车|LED广告车|油罐车|道路救援车|垃圾车|程力专用汽车股份有限公司销售九分公司 | 呼吸家官网|肺功能检测仪生产厂家|国产肺功能仪知名品牌|肺功能检测仪|肺功能测试仪|婴幼儿肺功能仪|弥散残气肺功能仪|肺功能测试系统|广州红象医疗科技有限公司|便携式肺功能仪|大肺功能仪|呼吸康复一体机|儿童肺功能仪|肺活量计|医用简易肺功能仪|呼吸康复系统|肺功能仪|弥散肺功能仪(大肺)|便携式肺功能检测仪|肺康复|呼吸肌力测定肺功能仪|肺功能测定仪|呼吸神经肌肉刺激仪|便携式肺功能 | 皮带输送机(输送机械)-带式输送机-皮带输送机生产厂家-河南坤威机械 | 南京人才网_南京招聘网_南京人才市场最新招聘信息 | 苏州西服定制,西装定做时尚职业装品牌-尊羿西服定做网 | 酸碱废气中和塔-酸雾废气吸收塔-酸雾废气处理塔|首页-广州市佰镀通风设备有限公司 | 云南万通汽车学校【官方网站】 | 企业旺旺-qy55.com| 上海航空货运,上海空运,东方航空快递,机场物流,航空快运,上海东方航空托运公司 | 徐州恒铭机械设备有限公司_装载机配件_压路机配件_起重机配件_挖掘机配件_配件_徐州恒铭机械设备有限公司 | 威学一百-专注国际学校择校备考-DSE-A-level-雅思-托福-OSSD-港澳台联考-AP-IGCSE-IB-AMC-多邻国-PTE-SAT-SSAT-小语种(如日语,韩语,德语,法语,西班牙语,意大利语,俄语,泰语)等考试培训,为出国留学学生提供个性化定制性学习方案,线下实体面授+线上网络课程, 提供一对一,小班课等多种班型 | 西门子伺服电机维修_西门子变频器维修_西门子伺服驱动器维修_数控系统维修_PL维修-上海仰光电子 西克制冷官网│制冷机组冷风机冷库设备厂家-西克制冷(无锡)有限公司_西克制冷(无锡)有限公司 | 模具|晒纹-咬花-拉丝纹-立体纹-东莞市佳毅激光科技有限公司 | 京建鹏达_商用无烟烧烤设备多少钱|开店商用自助旋转烧烤炉价格|无烟电烧烤炉批发厂家|无烟烧烤桌定做厂商-京建鹏达烧烤设备网 | 增压泵-离心泵-管道泵-排污泵-上海渤泉泵业制造有限公司 【官方网站】 | 亚澳农机-亚澳南阳农机股份公司,旋耕机,旋播机,旋播施肥机,免耕播种机,旋耕播草多用机,果园机械-首页 | 全自动高速点胶机,锡膏喷印机系列,点胶阀核心配件厂家-博宁 |