我们的项目是一个单页应用,前端去访问服务器获取JSON数据,然后填充页面进行渲染,在Webkit上运行正常,但在Safari上就出现了问题,在Safari上登录的时候一直提示验证码错误,并且这是一个很麻烦的问题,因为只有将应用部署到远程服务器上才出现这个问题,本地测试是正常的。
经过仔细的排查错误后,检测出是因为我们获取验证码时发起了一次Ajax连接,然后验证码存储在了session里,接着验证时又发起了一次Ajax连接,因为Safari不保存cookie,所以有两个session,这样自然验证码就是错的了。
问题找到了,就开始着手找解决办法,最开始找到了一个,就是设置Safari可以保存cookie,我试了一下后,发现的确可以登录,证明问题找对了,但很明显,这个方法不合适,因为我们不能要求每一个用户都去设置他们的浏览器。于是开始找其他办法,最终在stackoverflow上找到了一个,
将服务器的IP地址改为域名
简单得难以置信,具体地解释可以看这里:http://stackoverflow.com/questions/2138245/session-is-lost-and-created-as-new-in-every-servlet-request
第二种方法是把sessionStorage换成了localStorage, 这下就都可以取到了。
参考:
https://blog.csdn.net/zgljl2012/article/details/50845451
https://blog.csdn.net/qq_43084297/article/details/82756494
https://www.cnblogs.com/pengc/p/8714475.html cookie,session机制
nginx解决办法:参考https://blog.csdn.net/jingogfhvk001/article/details/96305228
url的/问题
在nginx中配置proxy_pass时,当在后面的url加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径部分也给代理走。
下面四种情况分别用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解析顺序,参考 https://blog.csdn.net/lk0328/article/details/82856160
将服务跳转的location放在第一位,这样按照顺序匹配,先将服务请求进行转发,然后将剩余的所有请求均转发到本地vue目录,还需要增加try_files $uri /index.html;这句话大致是说,不管什么路径请求,都会转发到index.html页面中,然后再根据后面的路由及参数,由页面进行处理。
ios webview 中的session问题
https://www.jianshu.com/p/4f7b8b885683