java如何在使用HTTPUrlConnection时持久化cookie?
我已经开始使用推荐的HTTPUrlConnection
,并离开了DefaultHTTPClient
。其中一件我还不能粘合在一起的事情是使用持久的cookie存储。我只想在我的连接上附加一个自定义cookie处理程序/管理器来存储cookie。Android文档并没有太大的帮助,因为它将关于cookies的主题概括为两行
我之前一直在使用LoopJ的PersistentCookieStore
,效果很好
你知道我如何在安卓系统中建立一个持久的cookie存储库,并将其连接到我的HTTPUrlConnection
上,自动保存和检索cookie吗
谢谢
# 1 楼答案
这花了我几个小时,但我自己设法建立了一个定制的cookie存储
您必须通过以下方式连接:
以下是实际存储空间:
# 2 楼答案
在许多自定义
CookieStore
实现中存在一些基本问题第一个问题是将
HttpCookie
序列化为字符串-因为HttpCookie.toString()
方法的结果不适用于HttpCookie.parse(String header)
方法,所以HttpCookie.toString()
方法对此是不可接受的第二个问题:大多数
CookieStore
实现(例如,here)没有考虑HttpCookie.maxAge
字段的格式。这是cookie live的秒数。但如果你只是坚持它的价值,过一段时间再取消它,那就错了。必须将maxAge
字段转换为类似"expire_at"
的内容,并将其持久化,而不是maxAge
# 3 楼答案
在下面的链接中签出实现。它通过主机名保存cookie,就像原始java一样。网InMemoryCookieStore的实现确实如此
此外,它还包含SerializableHttpCookie,以便能够将完整的HashMap序列化到SharedReferences中
https://gist.github.com/jacobtabak/78e226673d5a6a4c4367
# 4 楼答案
我使用了上面的答案,但将add方法更改为以下方法,以处理来自同一URI的多个cookie(出于某种原因,这个带有GAE的cookie存储区将会话令牌和记住令牌视为来自同一URI的两个单独cookie):
以及访问和创建组合cookie:
连接到连接: