1. 程式人生 > >微信內嵌瀏覽器sessionid丟失問題

微信內嵌瀏覽器sessionid丟失問題

現象

微信中開啟網頁,圖形驗證碼經常提示錯誤,即使填寫正確也會提示錯誤,並且間歇性出現。
系統前期,使用者使用主要集中在pc瀏覽器中,一直沒有出現這樣的問題。近期有部分使用者是在微信中訪問的,才出現的這個問題。

抓包

由於只有在手機微信中出現這種情況,並且手機連的無線與pc不在一個區域網中,所以,只能在pc上用360wifi建立熱點(無線),然後手機連線熱點,再用wireshark抓360wifi網絡卡,檢視資料。
一個頁面中的,帶著sessionid傳送的多次請求,響應中的sessionid會被重置,具體來說就是cookie中的資訊是set-cookie:jessionid=xxxxx,並且這個set-cookie的jsessionid也不同

分析

經過測試發現
1、sessionid丟失只在微信中開啟網址時才會出現,尤其在安卓的微信中,丟失次數最多,iphone中幾乎不出現。
2、在手機非微信中開啟,比如手機瀏覽器,不會出現sessionid丟失
3、在pc瀏覽器中,不會出現sessionid丟失

推理論證

至此,懷疑是伺服器沒做session保持,經查證,伺服器有2個tomcat,都放在騰訊雲上,做了黏性session,黏性session是通過hash ip,然後取餘做的,所以懷疑是黏性session不起作用。
為了驗證這個猜測,通過不斷request,發現request一會到server1,一會又到server2,而且沒有規律可循。由於手機的ip是固定的,並且騰訊雲堅持他們的黏性session沒有問題,所以推測ip在中間傳輸過程被修改了。經過在伺服器上抓包發現,騰訊雲收到的ip的確是變化的。經過以上的驗證加上網上search,原來凶手是微信內嵌瀏覽器對所有請求都做了代理,從而導致騰訊雲收到的ip發生了變化

解決

由於微信內嵌瀏覽器對所有請求都做了代理,導致出去的ip不固定,從而導致騰訊雲伺服器的黏性session(基於客戶端ip做的黏性session)失效。所以,解決方案有兩個,要麼伺服器端只用一臺tomcat,要麼tomcat做session共享,比如
session放在redis中。這樣server1產生的sessionid,即使到了server2,也能從redis中找到。

相關推薦

瀏覽器sessionid丟失問題

現象 微信中開啟網頁,圖形驗證碼經常提示錯誤,即使填寫正確也會提示錯誤,並且間歇性出現。 系統前期,使用者使用主要集中在pc瀏覽器中,一直沒有出現這樣的問題。近期有部分使用者是在微信中訪問的,才出現的這個問題。 抓包 由於只有在手機微信中出現這種情況,並

javascript判斷是否是瀏覽器訪問

微信 asc urn win case agent ava spa window function isWeiXin(){    var ua = window.navigator.userAgent.toLowerCase();     if(ua.match(/Mic

瀏覽器自動開啟手機系統瀏覽器(手機預設瀏覽器

最近在做一個專案,有一項功能是從微信中的分享頁或者產品推廣頁面中下載app;在微信中直接下載app時微信是“拒絕”的,所以一般的做法是點選下載按鈕彈出遮罩層,提示在瀏覽器中開啟,然後進入外部瀏覽器,再次點選下載按鈕進行下載,這種做法雖然能夠實現下載的功能,但是這麼長的操作非常容易導致潛在使用者的流失。 那麼

瀏覽器如何直接打開外部瀏覽器下載APP(APK)

width 能效 瀏覽器 ima targe 鏈接 strip 自己 打開 想必大家會經常碰到網頁鏈接在微信內無法打開和微信內無法打開app下載頁的情況。通常這種情況微信會給個提示 “已停止訪問該網址” ,那麽導致這個情況的因素有哪些呢,主要有以下四

關於瀏覽器安卓端session丟失問題

共享 bsp 由於 session共享 ssi 客戶 replace -a 導致 項目上線測試,發現微信安卓端存在用戶登錄無法驗證session情況, 導致每次接口請求都無法識別,而蘋果客戶端不會出現此問題,非微信環境打開不會出現此問題,找到一些解決方案做下記錄: 方案1:

禁止瀏覽器調整字體大小

重寫 adjust dev llb document ner ack 設置 ridge 原因: 制作微信頁面是,用戶設置微信默認字體大小,而造成頁面布局的不忍直視 解決方案: iOS: /* IOS禁止微信調整字體大小 */ body { -webkit-t

通過js修改瀏覽器title

瀏覽器 document title aid 微信 eat .com none clas document.setTitle = function(t) { document.title = t; var i = document.

解決IOS瀏覽器返回後不執行js腳本的問題

style load 返回 on() cti 發現 bsp 內置瀏覽器 false 在A頁面寫一個$(function(){}) 後隨便點擊一個URL跳轉到B頁面 利用微信內置瀏覽器 返回鍵返回到A頁面後發現這段JS不執行,後來找到了解決方案 $(f

支付之h5方式(非瀏覽器中支付)

開放 奔騰 server 手機號 產品 etop 名稱 ota lds 這兩天完成了公司網站手機和PC端的支付對接,就是支付寶和微信. 對接完後有所感觸,我們來聊一聊,微信支付的坑,為什麽這麽說呢,因為我在對接完支付寶後是很愉快的,基本上在demo上稍加修改就ok了,

禁止瀏覽器的字體縮放問題

一個 android tar 解決 undefine -c attach bsp lba 由於微信自帶字體放大功能,因此基於微信的頁面都可以通過微信進行字體放大,但是有些情況下這並不是我們想要的,因為很多移動端頁面的開發都是使用rem作為單位的,當使用微信進行字體

ticket跳轉】手機瀏覽器網頁跳轉到瀏覽器打開

blank turn 12c weixin net 瀏覽器 界面 一個 問題 【微信ticket跳轉】手機瀏覽器網頁跳轉到微信內置瀏覽器打開 起始不少人已經關註到了招行的智能客服:http://xyk.cmbchina.com/Latte/wx/20150520wkf?fr

瀏覽器瀏覽H5頁面彈出的鍵盤遮蓋文本框的解決辦法

document android 微信內置瀏覽器 list 內置 time In nbsp out 最近在做微信公眾號的內嵌頁面,發現點擊輸入框時鍵盤蓋住文本框,找到一段代碼解決了這個問題。 iOS和android手機都已親測,需要的可以直接拷貝到代碼中使用。 js代碼

判斷當前頁面是否在瀏覽器中打開

pan var 不同的 nav rom navigator false 都是 16px 轉: 任何瀏覽器的判斷都是獲取user-agent參數進行判斷的,判斷當前頁面是否在微信瀏覽器中打開同樣也不例外。1、首先需要獲取微信內置瀏覽器的User Agent,經過對微信的瀏覽器

判斷qq瀏覽器瀏覽器

var ua = navigator.userAgent.toLowerCase(), isWx = false,isQQ = false, isQQInstalled = false; if(ua.indexOf(' qq')>-1 &

瀏覽器 ios video再次點選事件沒反應 video有些視訊上下出現空白原因

問題一:video再次點選事件沒有反應,Android正常 解決辦法:在video 標籤中加入 :webkit-playsinline playsinline <div class="dis_video"> <video webkit-p

用chrome在電腦上模擬瀏覽器

先了解安卓微信和Ios微信的UA(User agent:使用者代理) 安卓微信UA: mozilla/5.0 (linux; u; android 4.1.2; zh-cn; mi-one plus build/jzo54k) applewebkit/534.30 (khtml, like geck

分享(瀏覽器

轉自:https://blog.csdn.net/kobe088124/article/details/54097593 /**!   * 微信內建瀏覽器的Javascript API,功能包括:  

瀏覽器自動跳轉其它瀏覽器(手機預設瀏覽器

最近在做一個專案,有一項功能是從微信中的分享頁或者產品推廣頁面中下載app;在微信中直接下載app時微信是“拒絕”的,所以一般的做法是點選下載按鈕彈出遮罩層,提示在瀏覽器中開啟,然後進入外部瀏覽器,再次點選下載按鈕進行下載,這種做法雖然能夠實現下載的功能,但是這麼長的操作非常容易導致潛在使用者的流失。 那麼

PC瀏覽器,history.go(-1)進入變空白問題

問題:電腦版微信瀏覽器中,history.length不會因為關閉瀏覽器而消失,所以在執行history.go(-1)時,微信瀏覽器會判定為上一個頁面存在,執行跳轉。但當在微信中點選連結直接進入目標頁面時,實際上當前瀏覽器中是不存在上一個頁面的,導致倒退變成空白。 解決方法1:可以直接使用win

關於瀏覽器怎麽自動跳轉到手機其他瀏覽器

技術分享 開發 禁止用戶 提高 網址 助手 鏈接地址 unity src app在微信上禁止下載的。只有用戶用右上角的瀏覽打開此下載頁面時才能下載,現在就是想實現,只要是用戶打開此現在頁面之後點擊下載按鈕就用js自動跳轉到用其他瀏覽器打開然後下載,就跟滴滴打車分享後下載客戶