最近遇到一個棘手的問題,微信公眾平臺的前端站點session老是丟失,我們是走的微信網頁授權,授權后獲取用戶openid,丟失后沒有openid后續(xù)的操作全白搭了,因為沒了openid只能判斷為客戶不是在微信端訪問進行提示,

然后接連收到客服中心回饋問題,不過全是安卓客戶端的ios的完全沒有(真邪門了),哎,秉著有問題就要解決的態(tài)度,開搞吧!

      我們前端有六臺Windows server 2012,部署的IIS站點,用A10做的硬負載,之前openid都是作為url參數各個page進行傳遞的,領導有意見,因為作為url參數的話微信的分享功能可以把整段鏈接分享出去,后來我們把分享按鈕屏蔽掉了,不過效果還是不太好,手微信頁面加載慢的時候屏蔽的js還沒生效還是能復制到鏈接什么的,后來改成了session,所以考慮到應該在請求分發(fā)下六臺服務器session沒同步導致的!

平面設計培訓,網頁設計培訓,美工培訓,游戲開發(fā),動畫培訓

      之前也看過寫關于分布式下session的問題,然后自己也想了想,試著用redis+Cookie的方案來試下,這個方案也有兩種用法,目前只使用了第一種,第二種是為了防止第一種失敗考慮的,下面大概先說下方案。

     用戶授權后,任意站點拿到openid后生成guid作為sessionId 寫到cookie, 然后將sessionId+自定義key作為rediskey,然后將openid作為redisvalue寫入redis,redis跟cookie的寫入都是有時效性的,如果中途請求分發(fā)到別的服務器就直接拿cookie然后組裝rediskey去查詢,如果沒有那就認為客戶不是正常手段進入頁面的,如果有就拿openid進行下面業(yè)務操作,見圖:

平面設計培訓,網頁設計培訓,美工培訓,游戲開發(fā),動畫培訓                平面設計培訓,網頁設計培訓,美工培訓,游戲開發(fā),動畫培訓

網友評論