微信小程序開(kāi)發(fā)-服務(wù)端session值取不到染服;小程序res.header['Set-Cookie']隱藏的坑

問(wèn)題:本地服務(wù)器存取session沒(méi)有問(wèn)題。通過(guò)小程序叨恨,比如發(fā)驗(yàn)證碼柳刮,服務(wù)器端將驗(yàn)證碼存為session。校驗(yàn)驗(yàn)證碼的時(shí)候重新取session,提示session值不存在痒钝。

根源:微信小程序不能保存Cookie秉颗,導(dǎo)致每次wx.request到服務(wù)端都會(huì)創(chuàng)建一個(gè)新的會(huì)話,從而當(dāng)前會(huì)話不再是之前存驗(yàn)證碼的那個(gè)會(huì)話送矩,自然也就取不到session值了蚕甥。

解決方法:(由于本人很懶,直接參考栋荸、引用大神的文章菇怀,文末有原文鏈接,原文板塊比較好看一點(diǎn)晌块。我這里重點(diǎn)在于記錄微信小程序的另一個(gè)坑爱沟。)

普通的Web開(kāi)發(fā),都是把sessionid保存在cookie中傳遞的匆背。

不管是java還是php呼伸,服務(wù)端的會(huì)在response的header中加上Set-Cookie

例如:

Response Headers

Content-Type:application/json;charset=UTF-8

Date:Mon, 02 Apr 2018 16:02:42 GMT

Set-Cookie:JSESSIONID=781C7F500DFA24D663BA243A4D9044BC;path=/yht;HttpOnly

瀏覽器的請(qǐng)求也會(huì)在header中加上

例如:

Request Headers

Accept:*/*

Accept-Encoding:gzip, deflate, br

Accept-Language:zh-CN,zh;q=0.8

Cache-Control:no-cache

Connection:keep-alive

Content-Length:564

content-type:application/json

Cookie:JSESSIONID=781C7F500DFA24D663BA243A4D9044BC;path=/yht;HttpOnly

通過(guò)這個(gè)sessionid就能使瀏覽器端和服務(wù)端保持會(huì)話,使瀏覽器端保持登錄狀態(tài)钝尸。但是括享,微信小程序不能保存Cookie,導(dǎo)致每次wx.request到服務(wù)端都會(huì)創(chuàng)建一個(gè)新的會(huì)話珍促,小程序端就不能保持登錄狀態(tài)了铃辖。

一個(gè)比較簡(jiǎn)單的辦法就是在小程序端把cookie保存到storage里,后續(xù)請(qǐng)求的時(shí)候再讀storage猪叙,把cookie添加到請(qǐng)求頭里娇斩,這樣做的好處就是,服務(wù)端不用做任何改動(dòng)


具體操作如下:



1.把服務(wù)端response的Set-Cookie中的值保存到Storage中

wx.request({

????url: path,method:method,

????header: header,

????data:data,

????success:function(res){

????????if(res && res.header && res.header['Set-Cookie']){

? ? ? ? ? ????? wx.setStorageSync('cookieKey', res.header['Set-Cookie']);//保存Cookie到Storage

????????}

????},

????fail:fail??

})



2.wx.request再?gòu)腟torage中取出Cookie,封裝到header中

letcookie = wx.getStorageSync('cookieKey');

letpath=conf.baseurl+url;

letheader = { };

if(cookie){? ?

?????header.Cookie=cookie;?

?}? ??

wx.request({? ??

????url: path,? ?

?????method:method,? ??

????header: header,? ??

????data:data,? ??

????success:success,? ?

?????fail:fail?

?})



重點(diǎn)來(lái)了:微信小程序 wx.request 回調(diào)時(shí)取響應(yīng)頭Set-Cookie的坑

我在這里還遇到了另外一個(gè)問(wèn)題沐悦,當(dāng)服務(wù)器響應(yīng)多個(gè)Set-Cookie時(shí)成洗,小程序通過(guò)wx.request 回調(diào)取res.header['Set-Cookie']所取到的Set-Cookie值是把它們用逗號(hào)拼接在一起,從而產(chǎn)生的錯(cuò)誤的Cookie藏否,這樣請(qǐng)求后臺(tái)的時(shí)候還是取不到相應(yīng)的session。而真正需要的是用分號(hào)拼接多個(gè)Set-Cookie值充包。例如:

服務(wù)器響應(yīng):

Set-Cookie:session_name=184299abe5d9ac09559df76bff200a7985e55f86; expires=Tue, 23-Oct-2018 09:15:38 GMT; Max-Age=7200; path=/; HttpOnly

Set-Cookie:shop_rootpath=app%2Fsmallapp

小程序通過(guò)res.header['Set-Cookie']取到的Set-Cookie值卻是:

"shop_rootpath=app%2Fsmallapp,session_name=184299abe5d9ac09559df76bff200a7985e55f86; expires=Tue, 23-Oct-2018 09:15:38 GMT; Max-Age=7200; path=/; HttpOnly"

而真正正確的值應(yīng)該是smallapp與session_name之間用分號(hào)隔開(kāi)而不是逗號(hào):

"shop_rootpath=app%2Fsmallapp;session_name=184299abe5d9ac09559df76bff200a7985e55f86; expires=Tue, 23-Oct-2018 09:15:38 GMT; Max-Age=7200; path=/; HttpOnly"

但坑終究是坑副签,寄人籬下遥椿,有坑也只得我們自己填。

填坑方法:在步驟2中的if判斷中淆储,自己重新拆分Storage中取出的Cookie冠场,整理成后端需要的規(guī)范的cookie。再賦值給header.Cookie本砰。

if(cookie){? ?

? ???//步驟1: 用JS的split()函數(shù)拆分cookie

? ? ?//步驟 2:組裝成需要的新cookie

? ? ??var newcookie = XXX;

?????//步驟 3:賦值

? ? ? ?header.Cookie=newcookie;?

?}? ?

這個(gè)問(wèn)題暫時(shí)沒(méi)找到其他解決方案碴裙,也請(qǐng)知道的朋友指點(diǎn)一下。




原文引用:微信小程序開(kāi)發(fā)-保存服務(wù)端sessionid的方法

作者:愛(ài)吐槽的coder

鏈接:http://www.reibang.com/p/5c928e0df024

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末点额,一起剝皮案震驚了整個(gè)濱河市舔株,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌还棱,老刑警劉巖载慈,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異珍手,居然都是意外死亡办铡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)琳要,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)寡具,“玉大人,你說(shuō)我怎么就攤上這事稚补∩硅荆” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵孔厉,是天一觀的道長(zhǎng)拯钻。 經(jīng)常有香客問(wèn)我,道長(zhǎng)撰豺,這世上最難降的妖魔是什么粪般? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮污桦,結(jié)果婚禮上亩歹,老公的妹妹穿的比我還像新娘。我一直安慰自己凡橱,他們只是感情好小作,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著稼钩,像睡著了一般顾稀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坝撑,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天静秆,我揣著相機(jī)與錄音粮揉,去河邊找鬼。 笑死抚笔,一個(gè)胖子當(dāng)著我的面吹牛扶认,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播殊橙,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼辐宾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了膨蛮?” 一聲冷哼從身側(cè)響起叠纹,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鸽疾,沒(méi)想到半個(gè)月后吊洼,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡制肮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年冒窍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片豺鼻。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡综液,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出儒飒,到底是詐尸還是另有隱情谬莹,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布桩了,位于F島的核電站附帽,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏井誉。R本人自食惡果不足惜蕉扮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望颗圣。 院中可真熱鬧喳钟,春花似錦、人聲如沸在岂。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蔽午。三九已至易茬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間祠丝,已是汗流浹背疾呻。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工除嘹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留写半,地道東北人岸蜗。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像叠蝇,于是被迫代替她去往敵國(guó)和親璃岳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • cookie cookie的起源 早期web剛開(kāi)始出現(xiàn)復(fù)雜的應(yīng)用程序時(shí)悔捶,產(chǎn)生了對(duì)于能夠直接在客戶端上存儲(chǔ)用戶信息能...
    zenggo閱讀 3,835評(píng)論 1 52
  • 目錄Cookie機(jī)制什么是CookieCookie的不可跨域名性Unicode編碼:保存中文BASE64編碼:保存...
    Tomatoro閱讀 16,942評(píng)論 7 186
  • 會(huì)話(Session)跟蹤是Web程序中常用的技術(shù)铃慷,用來(lái)跟蹤用戶的整個(gè)會(huì)話。常用的會(huì)話跟蹤技術(shù)是Cookie與Se...
    chinariver閱讀 5,617評(píng)論 1 49
  • 背景在HTTP協(xié)議的定義中蜕该,采用了一種機(jī)制來(lái)記錄客戶端和服務(wù)器端交互的信息犁柜,這種機(jī)制被稱為cookie,cooki...
    時(shí)芥藍(lán)閱讀 2,364評(píng)論 1 17
  • 時(shí)間:2018年二月二十八號(hào) 地點(diǎn):縣二初中會(huì)議室 參會(huì)人員:全體七年級(jí)英語(yǔ)老師 七年級(jí)成績(jī)數(shù)據(jù)分析 每次考試通過(guò)...
    上善若水sunny閱讀 1,941評(píng)論 3 1