TP6 中如何开启Session,如何安装验证码和应用中间件

一、如何开启Session

可以直接使用think\facade\Session类操作Session。

新版本不支持操作原生$SESSION数组和所有session开头的函数,只能通过Session类(或者助手函数)来操作。会话数据统一在当前请求结束的时候统一写入 所以不要在session写入操作之后执行exit等中断操作,否则会导致Session数据写入失败。

开启Session

Session功能默认是没有开启的(API应用通常不需要使用Session),如果你需要使用Seesion,需要在全局的中间件定义文件中加上下面的中间件定义:

'think\middleware\SessionInit'

如下图:


开启Session的位置

如果是多应用模式,并且你只是用于部分应用,那么也可以在应用中间件定义文件中单独开启。

二、安装验证码

安装好了框架,首次使用安装码需要安装think-captcha

composer require topthink/think-captcha

验证码库需要开启Session才能生效。

使用

三、创建中间件

中间件主要用于拦截或过滤应用的HTTP请求,并进行必要的业务处理。

新版部分核心功能使用中间件处理,你可以灵活关闭。包括Session功能、请求缓存和多语言功能。

注册中间件

新版的中间件分为全局中间件、应用中间件(多应用模式下有效)、路由中间件以及控制器中间件四个组。执行顺序分别为:

全局中间件->应用中间件->路由中间件->控制器中间件

定义中间件

可以通过命令行指令快速生成中间件

php think make:middleware Check

这个指令会 app/middleware目录下面生成一个Check中间件。

注意:此创建中间件是全局中间件

所有的模块在进行访问时,都会经过此中间件。

前置/后置中间件

中间件是在请求具体的操作之前还是之后执行,完全取决于中间件的定义本身。

下面是一个前置行为的中间件

<?php

namespace app\middleware;

class Before
{
    public function handle($request, \Closure $next)
    {
        // 添加中间件执行代码

        return $next($request);
    }
}

下面是一个后置行为的中间件

<?php

namespace app\middleware;

class After
{
    public function handle($request, \Closure $next)
    {
        $response = $next($request);

        // 添加中间件执行代码

        return $response;
    }
}

中间件方法同样也可以支持依赖注入。

来个比较实际的例子,我们需要判断当前浏览器环境是在微信或支付宝

namespace app\middleware;

/**
 * 访问环境检查,是否是微信或支付宝等
 */
class InAppCheck
{
    public function handle($request, \Closure $next)
    {
        if (preg_match('~micromessenger~i', $request->header('user-agent'))) {
            $request->InApp = 'WeChat';
        } else if (preg_match('~alipay~i', $request->header('user-agent'))) {
            $request->InApp = 'Alipay';
        }
        return $next($request);
    }
}

然后在你的移动版的应用里添加一个middleware.php文件
例如:/path/app/mobile/middleware.php

return [
    app\middleware\InAppCheck::class,
];

然后在你的controller中可以通过request()->InApp获取相关的值

推荐阅读更多精彩内容