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

相关文章
相关标签/搜索