Android HttpUrlConnection如何在请求头中设置cookie?

Android HttpUrlConnection如何在请求头中设置cookie?,第1张

URL url = new URL(Url)

url_con = (HttpURLConnection) url.openConnection()

url_con.setRequestProperty("Cookie",cookies)

1. 在app启动的时候,设置一个cookiemanager的实例

写在APP的oncreate里面:

CookieSyncManager.createInstance(this)

2. 设置,获取

protected String getCookie() {

CookieManager cookieManager = CookieManager.getInstance()

String cookie = cookieManager.getCookie("cookie")

if (cookie != null) {

return cookie

} else {

return ""

}

}

protected void setCookie(String cookie) {

CookieManager cookieManager = CookieManager.getInstance()

cookieManager.setCookie("cookie", cookie)

}

3. 过期按需处理一下

附1:cookie的获取

response.headerFields = conn.getHeaderFields()

setCookies(response.headerFields)

/**

* 存储cookie

* @param headerFields

*/

protected void setCookies(Map<String, List<String>>headerFields) {

if (null == headerFields) {

return

}

List<String>cookies = headerFields.get(COOKIES_KEY)

if (null == cookies) {

return

}

for (String cookie : cookies) {

setCookie(cookie)

}

}

COOKIE_KEY="Set-Cookie"

1.什么是 cookie?cookie 和 token 有何区别?

cookie 是什么呢?cookie 在英语中通常是指饼干,当然,我这里指的不是,而是 HTTP 网络请求中用来记录用户信息的一种数据形式或者说一种机制。

cookie :在客户端发送登录 *** 作的网络请求时,服务器在登陆成功返回的 response header 中会添加一个 set-cookie 的值,作为用户的身份认证,如果是浏览器的话,后面每一次发请求时,浏览器都会自动将之前获取到的 cookie 值插入到 request header 的 cookie 字段中,而且 cookie 本身包括多个属性,比如有效期 expires、域 domain等,因此采用 cookie 的登录机制需要考虑到对 cookie 本身的管理。cookie 主要是在 web 领域使用。

token :相比 cookie,token 令牌的登录机制要更轻,直观的感受是,登录认证成功后,服务器返回 token 值,然后在请求的 url 中拼接一段 “token=%^&%#&%#&” 就完事了,至于什么跨域、安全策略什么的,根本没他什么事,客户端管理 token 也非常简单,只要看好这个字符串就行了,所以 token 一般在移动端用的比较多。当然,移动应用中的 web view 还是要处理 cookie 的。

2.iOS 中的网络请求中如何处理 cookie?

在开始处理 cookie 时,需要了解两个类,NSHTTPCookie 和 NSHTTPCookieStorage,在用的时候要注意几点:

下面切入正题吧,我是如何做的呢?

首先是登录。登录成功后,服务器在 HTTP response header 中的 set-cookie 字段中返回了 cookie 的值,我们可已通过多种方式获取到我们想要的 cookie 值,我是采用了下面这种方式来读取的,因为我们的服务器没有设置 expireDate,所以我就自己做持久化存储了。

然后是请求时添加 cookie 到 request header。实际上这一步系统(NSURLSession / NSURLConnection)已经自动帮我们处理了,具体细节我也不太清楚。

还要考虑重启应用后的 *** 作,由于我们的服务器没有设置 expireDate 以及上面提到的其他原因,在程序重启时,NSHTTPCookieStorage 并不会保存上一次使用应用时的 cookie,所以我们需要在程序启动时读取自己保存的 cookie,同时更新 NSHTTPCookieStorage 的 cookie。

关于 cookie 的有效期处理,在使用 cookie 时需要自己判断 cookie 是否过期,NSHTTPCookieStorage 是不会自动帮我们处理的,更何况我们自己还做了本地存储,所以我们在用到 cookie 时还需要检查 cookie 是否过期,如果过期了,就要废弃掉失效的 cookie。我是在用户的登录状态方法中做的处理:

最后还要记得在退出登录时也要删除 cookie:

3.iOS 中的原生网络请求如何与 webView 实现 cookie 共享?

遗留问题:

1.服务器是在什么时候更新/生成cookie ?

2.登陆成功后,系统是如何自动添加 cookie 到 request header 中去的?

3.服务器是怎么识别客户端的 cookie 的?


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12065963.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存