gpt4 book ai didi

java - android URLConnection 和 cookies

转载 作者:行者123 更新时间:2023-12-01 11:38:54 28 4
gpt4 key购买 nike

我一直在努力尝试在登录后维持 session ,我想知道是否有人可以提供帮助。我本来想尝试 Apache,但是 android documentation声明他们已经放弃 Apache,转而使用 Java 的 URLConnection。

  1. 如果我将 cookie 数据存储为额外 bundle ,我该如何获取它数据并将其添加回 CookieManager?

  2. 将cookie数据存储到字符串中然后传递是不是不好的形式使用 bundle 附加功能将其添加到我的下一个 Activity 中?

  3. 我是否必须在每个 Activity 中创建一个 CookieManager,基本上每次请求后存储它,重新分配它,然后发出我的下一个请求?

    //登录.java: 私有(private) CookieManager 登录Cookie = new CookieManager(); extras.putString("Cookies", loginCookie.toString());

    //LoggedIn.java:
    Bundle bundle = intent.getExtras();
    String strCookies = bundle.getString("Cookies");
    SummaryCookies = (CookieManager)strCookies; //I tried casting the strCookies back to a CookieManager, but that did not work. :(

如何从 strCookies 获取 cookie 并将其转换回 CookieManager 可以理解的格式?

最佳答案

1+2) 我认为这不是使用 Cookie 的好方法,因为当您停止应用程序时,该 cookie 也会被删除。您应该将它们保存到持久存储并稍后使用它们。

3) 您必须实现自己的 CookieStore,然后创建一个 CookieManager 并使用 CookieHandler.setDefault(...) 设置其默认值。这适用于整个系统,因此您不应为每个 Activity 创建它。

4) 如果您仍然想使用您的方法。您可以通过 getHeaderFields() 方法从响应头中获取 Cookie,并查询“Set-Cookie”和“Set-Cookie2”头。像“Set-Cookie:Your-string-cookie-here”一样构建 header 字符串,并使用 HttpCookie.parse(headerString) 获取列表 HttpCookie 对象。

这是创建持久 cookie 存储的示例。如果您需要,这里是完整的源代码:https://github.com/nguyentrungduy/Customize-CookieStore

@Override
public void add(URI uri, HttpCookie cookie) {
// TODO Auto-generated method stub
synchronized (this) {
URI uri2 = createURI(uri);
List<HttpCookie> cookies = mCookies.get(uri2);
if (cookies == null) {
cookies = new ArrayList<HttpCookie>();
mCookies.put(uri2, cookies);
} else {
cookies.remove(cookie);
}
cookies.add(cookie);
// Save into SharePreferenced
saveToPersistent(uri2, cookies);
}
}

@Override
public List<HttpCookie> get(URI uri) {
// TODO Auto-generated method stub
synchronized (this) {
List<HttpCookie> httpCookies = new ArrayList<HttpCookie>();
List<HttpCookie> values = mCookies.get(uri);
if (values != null) {
for (HttpCookie httpCookie : values) {
if (!httpCookie.hasExpired()) {
httpCookies.add(httpCookie);
}
}
}

Set<Entry<URI, List<HttpCookie>>> set = mCookies.entrySet();
for (Entry<URI, List<HttpCookie>> entry : set) {
if (uri.equals(entry.getKey())) {
continue;
}
List<HttpCookie> cookies = entry.getValue();
Iterator<HttpCookie> iterator = cookies.iterator();
while (iterator.hasNext()) {
HttpCookie cookie = iterator.next();
String domain = cookie.getDomain();
if (!domainMatches(domain, uri.getHost())) {
continue;
}
if (cookie.hasExpired()) {
iterator.remove();
} else if (!httpCookies.contains(cookie)) {
httpCookies.add(cookie);
}
}
}
return Collections.unmodifiableList(httpCookies);
}
}

关于java - android URLConnection 和 cookies,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29718560/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com