q***@163.com
q***@163.com
  • 发布:2017-01-25 13:07
  • 更新:2018-02-02 17:04
  • 阅读:3005

ajax设置cookie,在高版本的android手机上无效

分类:MUI

无论是像这样:
headers: {
'Cookie': 'JSESSIONID=' + user.jsessionid,
'charset': 'utf-8',
'Content-Type': 'application/json'
},
还是这样:
plus.navigator.setCookie(server, 'JSESSIONID=' + jsessionid);
都不行,请求server的话,都会被重定向到登录页面(no session).
像上边第一种的话,在hbuilder里边真机调试(nexus 6p, android 7.1),命令行直接就报:
Refused to set unsafe header 'cookie'。
第二种虽然不会报这个错,但是离线打包之后,安装到手机,在调用服务端接口时,还是会被重定向到登录页。
有人遇到过同样的问题吗?或者能给出个解释,或者解决方案。

2017-01-25 13:07 负责人:无 分享
已邀请:
czdwlai

czdwlai

一样遇到这个问题 离线打包使用android6.0及以上的sdk 登陆就无法保持session 不知道官方什么时候解决这个问题

AndrewHE

AndrewHE

这个其实很好解决,只要服务端你可以控制就可以。
方案1.可以使用token授权的方式,就是token有时间限制,在一定时间范围内可以使用token去获取数据,token失效就重新登录或者重新获取一次token。
方案2.不适用cookie,你可以使用其它的参数,自定义一个头key来存储cookie,服务端可以先取cookie,如果取不到,则取你自定义的头来判断即可。

  • czdwlai

    主要就是服务端没法改

    2017-02-06 12:13

ANKH

ANKH - 前端

我是这么做的,可以做到保持登录状态了

if(plus.storage.getItem("jsessionid")){  
                        plus.navigator.removeAllCookie();  
                        plus.navigator.setCookie(url,plus.storage.getItem("jsessionid"))  
                    }  

                    var xhr = new plus.net.XMLHttpRequest();  
                    xhr.onloadend = function(){  
                        var setCookie = xhr.getResponseHeader("Set-Cookie");  
                        if(setCookie){  
                            plus.storage.setItem("jsessionid",setCookie)  
                        }  
                        var data = JSON.parse(xhr.responseText);  
                                                 callback(data)  
                    }  
                    xhr.open("get",url+"getMessage");  

                    // 发送HTTP请求  
                    xhr.send();

该问题目前已经被锁定, 无法添加新回复