關(guān)于cookie的坑

這是一次關(guān)于服務(wù)器session丟失原因的排查莲蜘、分析和解決方案的整理

環(huán)境描述

自從app的2.2 版本上線以來(lái)谭确,就有一個(gè)問(wèn)題困擾著我,那就是我們的測(cè)試環(huán)境session丟失問(wèn)題票渠。但正是環(huán)境卻不會(huì)發(fā)生逐哈,所以這個(gè)問(wèn)題就一直拖著了。而正式環(huán)境和測(cè)試環(huán)境唯一的差別就是:測(cè)試環(huán)境使用的是IP地址问顷,并且其中商城模塊(做web請(qǐng)求的主要頁(yè)面)和普通接口請(qǐng)求(API)共用相同的IP地址鞠眉,只是端口不同,正式環(huán)境中商城的web請(qǐng)求和 API 請(qǐng)求使用域名服務(wù)器择诈。API的每次請(qǐng)求,都會(huì)保證當(dāng)前處于登陸狀態(tài)出皇,如果沒(méi)有登陸狀態(tài)羞芍,那么會(huì)自動(dòng)登陸,并且返回session郊艘,每次請(qǐng)求的登陸狀態(tài)驗(yàn)證荷科。如果客戶(hù)端發(fā)送請(qǐng)求中所帶的session和服務(wù)器不一致,那就是未登錄狀態(tài)纱注,從而要自動(dòng)重新登陸畏浆。

問(wèn)題發(fā)生

在測(cè)試環(huán)境中,從app頁(yè)面狞贱,進(jìn)入到商城(商城是作為整個(gè)客戶(hù)端的一個(gè)小模塊刻获,主要是web頁(yè)面通過(guò)JS 與本地APP進(jìn)行交互。商城獨(dú)立運(yùn)營(yíng))瞎嬉。在商城中操作蝎毡,知道需要調(diào)用原生的充值功能,在充值成功之后氧枣,通過(guò)OC的UIWebView的借口沐兵,調(diào)用商城的JS方法,達(dá)到刷新進(jìn)入原生充值頁(yè)面之前的web頁(yè)面便监。但問(wèn)題就是在這個(gè)時(shí)候發(fā)生扎谎,當(dāng)我通過(guò)web view調(diào)用js 的recharge方法時(shí)候,商城后臺(tái)接收到了方法烧董,并且也調(diào)用了更新webview 頁(yè)面的方法毁靶,但是,在客戶(hù)端解藻,沒(méi)有接收到webview的更新老充,也就是說(shuō),他們雖然調(diào)用了方法螟左,但實(shí)際上這個(gè)方法在執(zhí)行過(guò)程中啡浊,是失敗的觅够,沒(méi)有達(dá)到目的。通過(guò)調(diào)試巷嚣,發(fā)現(xiàn)商城的session(商城和API請(qǐng)求使用不同的session)丟失了喘先。所以webview的重新渲染是沒(méi)有發(fā)生的。

分析原因

我試著google 找了一些關(guān)于cookie的知識(shí)廷粒,然后通過(guò)apple的文檔窘拯,了解了apple中關(guān)于cookie的文檔,發(fā)現(xiàn)對(duì)于cookie而言坝茎,只要其名字涤姊,域名,和保存路徑相同嗤放,那么后一次寫(xiě)入的cookie就會(huì)覆蓋前一次的思喊。既然這樣蛤袒,我嘗試著自己來(lái)改變cookie凉蜂,自己設(shè)定他們的名字,再向服務(wù)器提交請(qǐng)求磨德,但請(qǐng)求之后再回來(lái)看cookie岳服,又變回默認(rèn)的名字剂公。那就可以推斷是服務(wù)器將請(qǐng)求發(fā)送過(guò)去的cookie信息重寫(xiě)了,所以我這邊怎么改變都是沒(méi)用的吊宋。這個(gè)時(shí)候纲辽,我開(kāi)始與商城中做前段的同事強(qiáng)哥交流請(qǐng)教,(強(qiáng)哥之前是做服務(wù)器段的璃搜,所以服務(wù)器那段的他都是知道的)文兑。因?yàn)樯坛莣eb請(qǐng)求與API請(qǐng)求的服務(wù)器都是使用IP地址,只是端口不同腺劣,那問(wèn)題就在端口上了绿贞,應(yīng)該是后臺(tái)服務(wù)器在向app端傳遞cookie時(shí)候,沒(méi)有加上端口的處理橘原,所以不管是商城請(qǐng)求還是API請(qǐng)求籍铁,后一次的cookie都會(huì)覆蓋前一次的cookie,具體到app里趾断,那就是從app 進(jìn)入到商城模塊拒名,這個(gè)時(shí)候,商城的cookie覆蓋了API的cookie芋酌,然后從商城進(jìn)入充值增显,在完成充值請(qǐng)求的時(shí)候,app發(fā)現(xiàn)cookie中的session與服務(wù)器不一致脐帝,于是app重新登陸同云,這個(gè)時(shí)候糖权,商城的cookie又被API的cookie覆寫(xiě)。也就是商城的session丟失了炸站。當(dāng)充值完成之后星澳,app端調(diào)用商城后臺(tái)的js 方法更新web的頁(yè)面,這個(gè)時(shí)候旱易,帶到商城后臺(tái)去的cookie禁偎,實(shí)際上是API的cookie,所以造成了調(diào)用失敗阀坏,無(wú)法更新app端的UI如暖。

解決問(wèn)題

解決問(wèn)題的方法,那就針對(duì)相同的域名/IP地址忌堂,在使用不同端口劃分模塊時(shí)候装处,修改服務(wù)器的配置,使兩個(gè)功能模塊的cookie能區(qū)分開(kāi)來(lái)浸船。具體的處理,這得跟后臺(tái)交流寝蹈,也可以參考這里李命。

總結(jié)

  1. 這個(gè)問(wèn)題在正式環(huán)境一般都不會(huì)發(fā)生的,但問(wèn)題的原因確實(shí)是需要了解的
  2. 解決問(wèn)題的一般步驟如上箫老,確定變量封字,抓住問(wèn)題,進(jìn)行分析耍鬓,尋求解決方案阔籽,最后別忘了做個(gè)記錄,別掉進(jìn)相同的坑兩次牲蜀。
  3. 交流笆制,很多問(wèn)題并非是app端的問(wèn)題,像本文章的問(wèn)題涣达,所以積極的交流才能讓自己少做彎路在辆,更何況,交流中你就自然而然學(xué)到了不少東西度苔。
  4. 在向別人尋求幫助之前匆篓,應(yīng)該先自己想想,通過(guò)搜索引擎尋求方法寇窑,因?yàn)槟阌龅降膯?wèn)題鸦概,很多人都遇到過(guò)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末甩骏,一起剝皮案震驚了整個(gè)濱河市窗市,隨后出現(xiàn)的幾起案子先慷,更是在濱河造成了極大的恐慌,老刑警劉巖谨设,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熟掂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡扎拣,警方通過(guò)查閱死者的電腦和手機(jī)赴肚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)二蓝,“玉大人誉券,你說(shuō)我怎么就攤上這事】蓿” “怎么了踊跟?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)鸥诽。 經(jīng)常有香客問(wèn)我商玫,道長(zhǎng),這世上最難降的妖魔是什么牡借? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任拳昌,我火速辦了婚禮,結(jié)果婚禮上钠龙,老公的妹妹穿的比我還像新娘炬藤。我一直安慰自己,他們只是感情好碴里,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布沈矿。 她就那樣靜靜地躺著,像睡著了一般咬腋。 火紅的嫁衣襯著肌膚如雪羹膳。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天根竿,我揣著相機(jī)與錄音溜徙,去河邊找鬼。 笑死犀填,一個(gè)胖子當(dāng)著我的面吹牛蠢壹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播九巡,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼图贸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起疏日,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤偿洁,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后沟优,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體涕滋,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年挠阁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宾肺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡侵俗,死狀恐怖锨用,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情隘谣,我是刑警寧澤增拥,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站寻歧,受9級(jí)特大地震影響掌栅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜码泛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一猾封、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧弟晚,春花似錦、人聲如沸逾苫。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)铅搓。三九已至瑟押,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間星掰,已是汗流浹背多望。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留氢烘,地道東北人怀偷。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像播玖,于是被迫代替她去往敵國(guó)和親椎工。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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