获取access token的问题

发布于 2022-09-04 14:19:27 字数 611 浏览 6 评论 0

我想让它每隔7200秒获取一次 下面这个方法为什么不行呢?每次刷新页面都会重新获取一次 这是为什么?

       if(isset($_SESSION['access_token'])&&$_SESSION['expire_time']>time()){
            return $_SESSION['access_token'];
        }else{
            $access_token = $this -> access_token();
            $url='https://api.weixin.qq.com/cgi-bin/menu/create?access_token=' . $access_token['access_token'];
            $this->curl($url,$data);
            $_SESSION['access_token']=$access_token['access_token'];
            $_SESSION['expire_time']=time()+7200;
        }
        echo $_SESSION['access_token'];

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

奈何桥上唱咆哮 2022-09-11 14:19:27

access_token不能保存在SESSION中。

SESSION是跟客户端的回话,简单来说就是每个用户的SESSION都不同,而access_token是全局的,每7200秒刷新一次,如果你放在SESSION中就意为着每个用户都有一个自己的access_token,显然是不对的。你这样的代码造成的问题就是第二个用户登入网站后,第一个用户的access_token就失效了,实际上access_token跟用户无关。

正确的做法应该是存在本地缓存文件中,或者保存Redis缓存、或者DB中,每7200秒刷新一次。

情感失落者 2022-09-11 14:19:27

你应该好好看看session机制,给session定义一个expire_time就可以了吗
session的过期时间默认的过期时间是在php.ini里设置的ini_set('session.gc_maxlifetime',3600);
然后你上述的情况 sessionid是存在cookie里的,应该采用cookie或者数据库来设置过期时间比较好,
setcookie(session_name(), session_id(), 7200);不知我是否讲清楚了

玩心态 2022-09-11 14:19:27
        //先把你的session 清空一下
        public function access_token(){

           if( isset($_SESSION['access_token']) && $_SESSION['expire_time'] > time() ){
                   echo 'Old';
                $res =  $_SESSION['access_token'];
            }else{
                echo 'New';
                  $res = $this->new_access_token();
            }
            return $res;
        }

        public function new_access_token()
        {
            $access_token = $this -> access_token();
            $url='https://api.weixin.qq.com/cgi-bin/menu/create?access_token=' . $access_token['access_token'];
            $new_access_token = $this->curl($url,$data);
            // $_SESSION['access_token'] = $access_token['access_token'];
            $_SESSION['access_token'] = $new_access_token;
            // $_SESSION['expire_time']=  time()+7200;
            $_SESSION['expire_time']=  time()+ 6200;
            return $new_access_token;
        }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文