最近遇到一個(gè)棘手的問(wèn)題,微信公眾平臺(tái)的前端站點(diǎn)session老是丟失,我們是走的微信網(wǎng)頁(yè)授權(quán),授權(quán)后獲取用戶openid,丟失后沒(méi)有openid后續(xù)的操作全白搭了,因?yàn)闆](méi)了openid只能判斷為客戶不是在微信端訪問(wèn)進(jìn)行提示,
然后接連收到客服中心回饋問(wèn)題,不過(guò)全是安卓客戶端的ios的完全沒(méi)有(真邪門了),哎,秉著有問(wèn)題就要解決的態(tài)度,開(kāi)搞吧!
我們前端有六臺(tái)Windows server 2012,部署的IIS站點(diǎn),用A10做的硬負(fù)載,之前openid都是作為url參數(shù)各個(gè)page進(jìn)行傳遞的,領(lǐng)導(dǎo)有意見(jiàn),因?yàn)樽鳛閡rl參數(shù)的話微信的分享功能可以把整段鏈接分享出去,后來(lái)我們把分享按鈕屏蔽掉了,不過(guò)效果還是不太好,手微信頁(yè)面加載慢的時(shí)候屏蔽的js還沒(méi)生效還是能復(fù)制到鏈接什么的,后來(lái)改成了session,所以考慮到應(yīng)該在請(qǐng)求分發(fā)下六臺(tái)服務(wù)器session沒(méi)同步導(dǎo)致的!
之前也看過(guò)寫關(guān)于分布式下session的問(wèn)題,然后自己也想了想,試著用redis+Cookie的方案來(lái)試下,這個(gè)方案也有兩種用法,目前只使用了第一種,第二種是為了防止第一種失敗考慮的,下面大概先說(shuō)下方案。
用戶授權(quán)后,任意站點(diǎn)拿到openid后生成guid作為sessionId 寫到cookie, 然后將sessionId+自定義key作為rediskey,然后將openid作為redisvalue寫入redis,redis跟cookie的寫入都是有時(shí)效性的,如果中途請(qǐng)求分發(fā)到別的服務(wù)器就直接拿cookie然后組裝rediskey去查詢,如果沒(méi)有那就認(rèn)為客戶不是正常手段進(jìn)入頁(yè)面的,如果有就拿openid進(jìn)行下面業(yè)務(wù)操作,見(jiàn)圖:
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線安全]玩轉(zhuǎn)無(wú)線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26