Jerry's WIKIJerry's WIKI
概述
  • 🐞 web使用
  • 📐 常用组件
  • 💡 使用技巧
  • 🎱 规范相关
  • 🖥 工作流
  • 🛠 常用工具
  • 🌐️ 服务器
  • 📦 容器相关
  • ♨️ 编程语言
咖啡屋
  • 简体中文
  • English
GitHub
概述
  • 🐞 web使用
  • 📐 常用组件
  • 💡 使用技巧
  • 🎱 规范相关
  • 🖥 工作流
  • 🛠 常用工具
  • 🌐️ 服务器
  • 📦 容器相关
  • ♨️ 编程语言
咖啡屋
  • 简体中文
  • English
GitHub
  • 🖼 图像相关

    • 二维码
    • 条形码
    • 验证码
  • 🔐 锁相关

    • Redis分布式锁
    • 数据库悲观锁
    • 数据库乐观锁
    • 队列(单个消费)
  • 🏢 Office相关

    • 数据导出Excel
    • 数据导出Csv
  • ↔️ 加解密

    • AES
    • RSA
    • AWS4
    • RC4
  • 🍪 登录相关

    • JWT
    • Cookie
    • Session
    • Q&A
  • 📀 服务部署

    • 说明
    • 部署流程

Session

目录

  • 作用
  • 流程及原理
  • 设置session
    • 安装依赖包
    • 发布配置
    • 添加中间件
    • 使用示例
  • 注意事项

作用

  • 辅助WEB请求(Http)保持状态。

流程及原理

设置session

安装依赖包

标准库地址

composer require hyperf/session

发布配置

php bin/hyperf.php vendor:publish hyperf/session

<?php

declare(strict_types=1);
use Hyperf\Session\Handler;

return [
    'handler' => Handler\FileHandler::class, // 驱动类型
    'options' => [
        'connection' => 'default',
        'path' => BASE_PATH . '/runtime/session',
        'gc_maxlifetime' => 1200,
        'session_name' => 'HYPERF_SESSION_ID',
        'domain' => null,
        'cookie_lifetime' => 5 * 60 * 60,
        'cookie_same_site' => 'lax',
    ],
];

添加中间件

config/autoload/middlewares.php

<?php

declare(strict_types=1);
return [
    'http' => [
        ...
        // Session中间件(官方)
        Hyperf\Session\Middleware\SessionMiddleware::class,
        ...
    ],
];

使用示例

#[GetMapping(path: 'session/set')]
public function setSession(): array
{
    $this->session->set('ttt', 'xxx');
    return $this->result->getResult();
}

#[GetMapping(path: 'session/get')]
public function getSession(): array
{
    $session = $this->session->all();
    return $this->result->setData($session)->getResult();
}

注意事项

  • Session 依赖 Cookie 机制,如果 Cookie 禁用,Session无法正常使用(Session将Cookie当做传输SESSION_ID的媒介)。
  • 每个请求都会设置set-cookie,但是同一个会话的SESSION_ID不会变化。
  • 对于使用负载均衡的集群服务,应该将Session进行中心化存储,否则会出现重复创建Session和Session丢失问题。
  • 同样会出现跨域问题,参见Cookie跨域问题

【注意】

session和jwt(token)本质上都是颁发一个标识,然后客户端携带标识进行判断。但是侧重点不一样:
session是存储,拿到标识后去判断是否存储、获取存储的数据。
token是算法计算验证,一般情况下不存储,验证通过即认为合法请求。

时间 和 空间 的博弈问题。

编辑此页面
更新时间:
贡献者: 田朝帆
Prev
Cookie
Next
Q&A