ios safari瀏覽器不能保存session的問題,含nginx解決辦法

咱們的項目是一個單頁應用,前端去訪問服務器獲取JSON數據,而後填充頁面進行渲染,在Webkit上運行正常,但在Safari上就出現了問題,在Safari上登陸的時候一直提示驗證碼錯誤,而且這是一個很麻煩的問題,由於只有將應用部署到遠程服務器上纔出現這個問題,本地測試是正常的。html

通過仔細的排查錯誤後,檢測出是由於咱們獲取驗證碼時發起了一次Ajax鏈接,而後驗證碼存儲在了session裏,接着驗證時又發起了一次Ajax鏈接,由於Safari不保存cookie,因此有兩個session,這樣天然驗證碼就是錯的了。前端

問題找到了,就開始着手找解決辦法,最開始找到了一個,就是設置Safari能夠保存cookie,我試了一下後,發現的確能夠登陸,證實問題找對了,但很明顯,這個方法不合適,由於咱們不能要求每個用戶都去設置他們的瀏覽器。因而開始找其餘辦法,最終在stackoverflow上找到了一個,vue

將服務器的IP地址改成域名ios

簡單得難以置信,具體地解釋能夠看這裏:http://stackoverflow.com/questions/2138245/session-is-lost-and-created-as-new-in-every-servlet-requestnginx

第二種方法是把sessionStorage換成了localStorage, 這下就均可以取到了。web

參考:
https://blog.csdn.net/zgljl2012/article/details/50845451
https://blog.csdn.net/qq_43084297/article/details/82756494
http://www.javashuo.com/article/p-yklndxfy-o.html cookie,session機制瀏覽器

nginx解決辦法:參考https://blog.csdn.net/jingogfhvk001/article/details/96305228服務器

url的/問題cookie

在nginx中配置proxy_pass時,當在後面的url加上了/,至關因而絕對根路徑,則nginx不會把location中匹配的路徑部分代理走;若是沒有/,則會把匹配的路徑部分也給代理走。session

 

下面四種狀況分別用http://192.168.1.4/proxy/test.html 進行訪問。

第一種:

location /proxy/ {

     proxy_pass http://127.0.0.1:81/;

}

 

會被代理到http://127.0.0.1:81/test.html 這個url

 

第二咱(相對於第一種,最後少一個 /)

location /proxy/ {

     proxy_pass http://127.0.0.1:81;

}

會被代理到http://127.0.0.1:81/proxy/test.html 這個url

 

第三種:

location /proxy/ {

     proxy_pass http://127.0.0.1:81/ftlynx/;

}

會被代理到http://127.0.0.1:81/ftlynx/test.html 這個url。

 

第四種狀況(相對於第三種,最後少一個 / ):

location /proxy/ {

     proxy_pass http://127.0.0.1:81/ftlynx;

}

會被代理到http://127.0.0.1:81/ftlynxtest.html 這個url

關於 nginx解析順序,參考 http://www.javashuo.com/article/p-gajlsqxz-gq.html
將服務跳轉的location放在第一位,這樣按照順序匹配,先將服務請求進行轉發,而後將剩餘的全部請求均轉發到本地vue目錄,還須要增長try_files $uri /index.html;這句話大體是說,無論什麼路徑請求,都會轉發到index.html頁面中,而後再根據後面的路由及參數,由頁面進行處理。

ios webview 中的session問題
https://www.jianshu.com/p/4f7b8b885683

相關文章
相關標籤/搜索