Cookie 自动使用
Sum-sdl opened this issue · 24 comments
Cookie自动添加,我在登陆接口调用后会自动保存Cookie,调用其他接口在App没有退出的情况下Cookie能够获取到,App进程杀掉后,Cookie获取不到
SESSION ID 也是自动添加和设置的吗?
####################
RE: 是的
请问如何才能把Cookies保存到本地呢?
###########
默认自动保存到本地
通过框架里面的Cookie数据库,取出你想要的Cookie
DbCookieStore instance = DbCookieStore.INSTANCE;
List cookies = instance.getCookies();
默认和浏览器一样的策略管理cookie, 自动将cookie保存在DbCookieStore, 请求自动附件cookie信息.
获取和其他操作: DbCookieStore.INSTANCE....
要手动管理params.setUseCookie(false), 不自动保存和附加cookie到请求.
手动要获取请求中的cookie, 参考RequestInterceptListener的类文档说明(javadoc).
在header中设置cookie后在php的$_COOKIE中获取不到设置的cookie为什么
public List synCookies(Context context, String url) {
CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();// 移除
DefaultHttpClient dh = (DefaultHttpClient) XutilsHttp.http.getHttpClient();
CookieStore cs = dh.getCookieStore();
List cookies = cs.getCookies();
int tag = 0;
for (int i = 0; i < cookies.size(); i++) {
if ("SHAREJSESSIONID".equals(cookies.get(i).getName())) {
tag = i;
break;
}
}
cookieManager.setCookie(url, cookies.get(tag).toString());// cookies是在HttpClient中获得的cookie
CookieSyncManager.getInstance().sync();
return cookies;
}
大神,利用XUTILS3.0框架后如何让WEBVIEW同步XUTILS的COOKIE那?我用了N多个办法都无法解决,求大神指点,XUTILS3.0有没有考虑过这方面的问题?
DefaultHttpClient dh = (DefaultHttpClient) XutilsHttp.http.getHttpClient();
楼上的你确定这样搞????HttpClient不是3.0版本都被移除了吗?????
没事了大神,最后找到了不是框架的问题,是cookieManager.setCookie(url, “cookies数据”);这里的COOKIES 数据要重新拼接成一个正确的格式就OK了,附上格式 StringBuilder sbCookie = new StringBuilder();
sbCookie.append(String.format("SHAREJSESSIONID=%s", mCookie.getValue()));
sbCookie.append(String.format(";domain=%s", mCookie.getDomain()));
sbCookie.append(String.format(";path=%s", mCookie.getPath()));
String cookieValue = sbCookie.toString();
登陆到服务器,然后获取登陆后的信息......用户输入的密码是前台加密, 请问如何传参数???如何设置Cookies???大神们帮帮我
Androidshilei commented on Jan 11
Cookie自动添加,我在登陆接口调用后会自动保存Cookie,调用其他接口在App没有退出的情况下Cookie能够获取到,App进程杀掉后,Cookie获取不到
我也遇到了这个问题,请问有解决方法吗?
这个问题我也遇到过,APP如果异常,Cookie就获取不到了,我采用的方式是,在登陆成功,将cookie保存在SharedPreferences,然后自定义RequestParams。
x.http().post(requestParams, new NetCallBack() {
public void onSuccess(org.json.JSONObject result) {
try {
L.d("NET_Login_Goods:"+result.toString());
DbCookieStore instance = DbCookieStore.INSTANCE;
List cookies = instance.getCookies();
for (HttpCookie cookie:cookies){
String name = cookie.getName();
String value = cookie.getValue();
L.d(name+" "+value);
if("JSESSIONID".equals(name)){
myCookie =value;
SharedPreferences.Editor editor = context.getSharedPreferences(Constant.SP_NAME, context.MODE_PRIVATE).edit();
editor.putString("Cookie", myCookie);
editor.commit();
NetConstant.Cookie = myCookie;
break;
}
}
}}
自定义请求参数类
public class NetParams extends RequestParams {
public NetParams(String url, JSONObject params, int timeOut){
super(Constant.EURL+url);
setConnectTimeout(timeOut==0?30*1000:timeOut);
if(params!=null)
setBodyContent(params.toString());
if (!"/auth/getDate".equals(url)&&!"/api/auth".equals(url)) { //登陆 和不需要cookie的接口
SharedPreferences sharedPreferences = x.app().getSharedPreferences(Constant.SP_NAME, Context.MODE_PRIVATE);
NetConstant.Cookie = sharedPreferences.getString("Cookie", "");
addHeader("Cookie", "JSESSIONID="+NetConstant.Cookie);
setUseCookie(false);
addHeader("Content-Type", "application/json;charset=UTF-8");
}else{
setUseCookie(true);
}
}
}
安卓正常退出(按返回键退出)用sp存储携带cookie,服务器能够找到session,为什么异常退出(直接home键,然后后台清理程序)服务器就找不到session了。
我的问题解决了,我的问题是因为过滤了太多不需要加cookie的url,虽然不知道为什么,但是解决了问题,贴出来让大家看看。
RequestParams params=new RequestParams(url);
if(NetUrl.LOGIN.equalsIgnoreCase(url)){
}else{
Log.e("TAG", "CommonUtils sessionid="+ MyApplication.SESSIONID);
params.addHeader("Cookie", "JSESSIONID="+MyApplication.SESSIONID);
params.addHeader("Content-Type", "application/json;charset=UTF-8");
params.setUseCookie(true);
}
注意最好只让登录接口过滤掉不需要添加cookie,其他接口都添加cookie,之前,就是把注册,广告,重置密码等都放到if里面,导致不能成功的添加cookie。
如何清理cookie?
现象:从服务器获取图片验证码,然后输入验证码后返回给服务器,明明是正确的总是显示验证失败!cookie的问题么? 我这个SESSIONID是红色的,啊啊啊
mRequestParams.addHeader("Cookie", "JSESSIONID="+ SCBaseApplication.SESSIONID);
mRequestParams.addHeader("Content-Type", "application/json;charset=UTF-8");
mRequestParams.setUseCookie(true);
请问,我在用x.image().bind(ImageView view,String url)这个方法的时候怎么带上cookie呢?其它的Post请求使用默认设置就可以,就是用这个方法来设置服务器的图片的时候,不能访问服务器,设置不了图片,还请大神给解决一下,谢谢
我也遇到了问题 并且解决了问题。我后台是用asp.net
public void onSuccess(String result) {
DbCookieStore instance = DbCookieStore.INSTANCE;
List<HttpCookie> cookies = instance.getCookies();
LogUtils.d( cookies);
for (HttpCookie cookie : cookies) {
String name = cookie.getName();
String value = cookie.getValue();
if ("ASP.NET_SessionId".equals(name)) {
//SharedPreferences 保存
BaseApplication.spUtils.putString("cookie", value);
break;
}
}
success(result, handler, successWhat, failWhat);
}
下面是自定义类
是将session id 保存在SharedPreferences
public class CCRequestParams extends RequestParams {
public CCRequestParams() {
}
public CCRequestParams(String uri) {
super(uri);
//SharedPreferences 读取
String cookie = BaseApplication.spUtils.getString("cookie", "");
if (!StringUtils.isEmpty(cookie)) {
addHeader("Cookie", "ASP.NET_SessionId=" + cookie);
setUseCookie(false);
}
LogUtils.d(cookie);
}
public CCRequestParams(String uri, ParamsBuilder builder, String[] signs, String[] cacheKeys) {
super(uri, builder, signs, cacheKeys);
}
}
关于Cookie的解析,存储及获取,真的有问题,希望作者可以实际测试一下:
在android7.0及以上的设备上使用域名作为地址时,使用
DbCookieStore instance = DbCookieStore.INSTANCE;
List<HttpCookie> cookies = instance.getCookies();
这种方式获取到的cookie字段不全,只有sessionId,服务器返回的其他cookie字段统统没有,但是在android 7.0以下的设备中没有问题,
这个bug的发生条件:
- 使用域名作为主机地址
- 在android7.0及以上的设备中
今天被这个bug坑了,真的是个深坑,希望作者可以实际测试一下.
最后使用RequestInterceptListener拦截了响应体,然后自己解析了响应头中的"Set-Cookie"才拿到服务端返回的所有cookie字段.
@wyouflf
通过addHeader("Cookie", "JSESSIONID=" + Common.cookieString); 设置的 cookie
和 进行以上设置后,进行网络请求通过以下代码获得的cookie
不一致,这样的结果是正确的吗???
DbCookieStore instance = DbCookieStore.INSTANCE;
List cookies = instance.getCookies();
我遇到了一个问题:通过 setHeader()
设置的 cookie
和 instace.getCookie()
获取的 cookie
值不同,是不是 setHeader()
无效了?
##########
用params.setHeader
@qiangxi RequestInterceptListener怎么用
@qiangxi RequestInterceptListener怎么用
@Sum-sdl 怎么自动使用
x.http() 设置 CookieStore
不知道还有没有人用。分享一个我在开发中遇到的实际问题:Android 8.0以上cookie的domain匹配问题。背景:开发机通过fidler的代理,使用localhost访问宿主机上的web接口。在Android 8.0设备上,取得的cookie的domain是localhost.local,但使用cookie在数据库查询中匹配的是localhost,导致加不上cookie。而android 5.0就不会出现此问题。后来改用实际IP绕过了此问题。怀疑是android系统的cookie实现上的区别导致