关于admin应用下开启session,不生效问题!

来源:6-8 ajax登录-基本参数校验(普通方式校验)

帅气的狗头

2019-12-29

目前能想到的原因,应该是调用扩展 tp-captcha 中的 CaptchaController 生成验证码图片时,未开启 session,导致 验证key 未写入到 session,所以在 admin 模块下使用 captcha_check() 一直未 false, 输出 session 中 captcha 也为空

写回答

4回答

keryz

2020-01-01

一、放入admin 不生效的原因:

        1、定位到加载中间件中的代码,在 think\Middlewar 中有一个 import 导入中间件,这里是注册中间件的位置。

        2、经过的我的查找,两处地方是加载了中间件:

            2.1 在 think\Http 下有一个 loadMiddleware  (加载全局中间件),经过测试,这个方法加载了

app\middleware.php文件,如图

            //img.mukewang.com/szimg/5e0b7e300926cb0423080502.jpg

            2.2 在 think\app\MultiApp 多应用模式  中有一个 loadApp 方法记载了模块的中间件,

                如果 是admin模块下有 middleware.php 那么就会加载,如图   

           //img.mukewang.com/szimg/5e0b7e82099a1d1b19420256.jpg

            如图,是加载中间件的顺序

             //img1.sycdn.imooc.com/szimg/5e0b7eaa0973f31714321504.jpg

        到这里也就知道了为什么放入 admin 模块下不生效,因为验证码的地址是 /captcha 访问,那么就加载不到admin 模块下的中间件 的 SessionInit ,也就开启不了session,如图

        //img.mukewang.com/szimg/5e0b7ef90948b3b011520204.jpg

 二、解决办法:

        经过上述的验证,需要把验证码的路径修改为 /admin/captcha 就可以成功,如图实现

        //img.mukewang.com/szimg/5e0b7f7b09e0b9a320740796.jpg


          //img1.sycdn.imooc.com/szimg/5e0b7fa7099ca05918380164.jpg

                   

    //img1.sycdn.imooc.com/szimg/5e0b7fc009bad37907120496.jpg    



16
6
图图__23
牛批兄弟
2020-02-20
共6条回复

李大侠1984

2020-07-11

请问verder下面的helper修改合适吗,如果要在自己的文件夹目录下,比如admin下扩展helper,应该怎么做

0
0

宠客

2020-02-26

请问,我按这个方法设置后,验证码图片显示不出了,如图//img.mukewang.com/szimg/5e555a3d0970447e05000348.jpg

//img1.sycdn.imooc.com/szimg/5e555a57099d429008160178.jpg


//img.mukewang.com/szimg/5e555a9409e2c65410840394.jpg


//img1.sycdn.imooc.com/szimg/5e555ac9093c9bd303700420.jpg

//img.mukewang.com/szimg/5e555ae1097de2ab08000410.jpg

0
0

活着smile

2019-12-29

//img.mukewang.com/szimg/5e086a3409e7aeef16270691.jpg

在创建验证码的时候,是可以从session里面取到key的值的,但是去检测验证码是否正确的时候就获取不到了,我在想,是不是因为作用域的问题。而且我关闭全局中间件和admin目录下的中间件 中的{\think\middleware\SessionInit::class},依旧可以从session获取到key,有点蒙

0
2
帅气的狗头
可以看下 think\session 下 Store 中 set() 和 get()的实现
2019-12-29
共2条回复

全流程开发 TP6.0实战高并发电商服务系统

一课就能掌握TP6.0基础及运用,打造完整高并发的电商后端项目

1458 学习 · 1310 问题

查看课程