在getWxAccessToken函數(shù)中,我的$_SESSION['access_token'],為何保存不下來,每次刷新的時(shí)候獲取到的都是新的access_token,開啟了session_start();了
? ? ? ? ? ? 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不存在或者已經(jīng)過期。
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 ? ? }
如過運(yùn)行提示$_SESSION未定義,加上isset()后可以運(yùn)行,但是每次獲取到的都是新的access_token
2017-03-14
session_start();不能放到條件分支里面,放在函數(shù)里面開頭即可,深層次的原因可能來自于,條件語句和函數(shù)的運(yùn)行方式不同,比如條件是執(zhí)行時(shí)才會分配內(nèi)存,而函數(shù)被調(diào)用時(shí)會首先為變量創(chuàng)建內(nèi)存,等函數(shù)結(jié)束調(diào)用銷毀,這個先后順序可能導(dǎo)致全局$_SESSION['access_token'],不會被當(dāng)作會話變量(也就是說不能被會話管理所管理)。
?是否為 未定義 ?: ?isset($_SESSION['access_token'])