请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

正在回答

4回答

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

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

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

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

app\middleware.php文件,如图

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

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

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

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

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

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

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

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

 二、解决办法:

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

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


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

                   

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



16 回复 有任何疑惑可以回复我~
  • 提问者 帅气的狗头 #1
    是这么个分析流程,重写个验证码获取就行了
    回复 有任何疑惑可以回复我~ 2020-01-01 01:23:26
  • 赞赞赞
    回复 有任何疑惑可以回复我~ 2020-01-02 22:46:07
  • singwa #3
    赞。回复的很棒
    回复 有任何疑惑可以回复我~ 2020-01-07 15:39:44
李大侠1984 2020-07-11 13:40:19

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

0 回复 有任何疑惑可以回复我~
宠客 2020-02-26 01:36:31

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

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


https://img1.sycdn.imooc.com//szimg/5e555a9409e2c65410840394.jpg


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

https://img1.sycdn.imooc.com//szimg/5e555ae1097de2ab08000410.jpg

0 回复 有任何疑惑可以回复我~
活着smile 2019-12-29 17:07:23

https://img1.sycdn.imooc.com//szimg/5e086a3409e7aeef16270691.jpg

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

0 回复 有任何疑惑可以回复我~
  • 提问者 帅气的狗头 #1
    未写入到文件,取值时不是从文件中获取的,而是从内存中返回的
    回复 有任何疑惑可以回复我~ 2019-12-29 17:35:13
  • 提问者 帅气的狗头 #2
    可以看下 think\session 下 Store 中 set() 和 get()的实现
    回复 有任何疑惑可以回复我~ 2019-12-29 17:42:16
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信