在getWxAccessToken函数中,我的$_SESSION['access_token'],为何保存不下来,每次刷新的时候获取到的都是新的access_token,开启了session_start();了

来源:2-2 自定义菜单代码实现

OCM

2017-03-14 11:40

            public function getWxAccessToken()

239     {

240         //将access_token存在session、cookie中

241         if ( $_SESSION['access_token'] && $_SESSION['expire_time'] > time())            {

242                 //仍然可以使用access_token;

244                 return $_SESSION['access_token'];

245 

246         } else {

247                 //重新获取,access_token不存在或者已经过期。

2

249                 $appid        = 'wsxxp3x10cbg12dehjhuaddjd7df89c9';

250                 $appsecret    = '8afxx7b0e02237c7hhh55l4ggb5sgssss44ss71ffc646bf98e5';

251                 //1.请求地址

252                 $url          = "https://api.weixin.qq.com/cgi-bin/token?gra    nt_type=client_credential&appid=".$appid."&secret=".$appsecret."";

253                 $res      = $this->http_curl($url,'get','json');

$access_token = $res['access_token'];

255                 //将重新获取到的access_token存到session中

256                 session_start();

257                 $_SESSION['access_token'] = $access_token;

258                 $_SESSION['expire_time'] = time() + 7000000;

259                 return $access_token;

260         }

261     }

如过运行提示$_SESSION未定义,加上isset()后可以运行,但是每次获取到的都是新的access_token

写回答 关注

1回答

  • OCM
    2017-03-14 14:30:53

    session_start();不能放到条件分支里面,放在函数里面开头即可,深层次的原因可能来自于,条件语句和函数的运行方式不同,比如条件是执行时才会分配内存,而函数被调用时会首先为变量创建内存,等函数结束调用销毁,这个先后顺序可能导致全局$_SESSION['access_token'],不会被当作会话变量(也就是说不能被会话管理所管理)。

     是否为 未定义  :  isset($_SESSION['access_token'])

PHP微信公众平台开发高级篇—自定义菜单

自定义菜单是微信开发中必不可少的环节,约吗?

28920 学习 · 81 问题

查看课程

相似问题