由于我遇到了奇怪的域/子域cookie问题,我想知道浏览器如何处理cookie.如果他们以不同的方式做到这一点,那么了解差异也会很好.
换句话说 - 当浏览器收到cookie时,该cookie可能有一个域和一个附加到它的路径.或者不是,在这种情况下,浏览器可能会替换它们的一些默认值.问题1:他们是什么?
稍后,当浏览器即将发出请求时,它会检查其cookie并过滤掉它应该为该请求发送的cookie.它通过将它们与请求路径和域匹配来实现.问题2:匹配规则是什么?
我问这个的原因是因为我对一些边缘情况感兴趣.喜欢:
.example.com可供使用www.example.com?.example.com可供使用example.com?example.com可供使用www.example.com?example.com可供使用anotherexample.com?www.example.com能够设置cookie中example.com?www.example.com能够设置cookie中www2.example.com?www.example.com能够设置cookie中.com?新增2:
此外,有人可以建议我应该如何设置一个cookie,以便:
www.example.com或设置example.com;www.example.com和两个都可以访问example.com.我有一个Java应用程序(JDK 1.7.0_13),并使用java.net.HttpURLConnection连接到一些基于servlet的服务进行会话管理.我试图弄清楚如何使用java.net.CookieManager来跟踪会话cookie.阅读文档我得到的印象是,使用CookieHandler.setDefault(新的CookieManager())安装CookieManager会导致cookie管理自动发生.但是,对同一URL的多个请求似乎不保留cookie.我是否必须手动从响应中提取cookie并在我自己的请求中重新发送它们,或者CookieManager是否会自动为我执行此操作?如果CookieManager没有,那么它添加了什么值?
为了测试一些东西,我有一个servlet,每当我的浏览器访问一个URL时,它就会成功递增一个计数器.这可以在Safari,FireFox和Chrome中正常工作......但是,我无法从独立的Java应用程序中使用它.
这是一个非常简单的测试程序,用于说明我希望简单的工作.它在开始时安装CookieManager,然后在控制台输入URL时重复调用fetch(String urlString)方法.
package com.brilliant.experimental;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpFetcher {
public static void fetch(String urlString) {
try {
URL url = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
InputStream in = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
int status = conn.getResponseCode();
System.out.println("Status = " + status);
String key;
System.out.println("Headers-------start-----");
for (int i = 1; (key = conn.getHeaderFieldKey(i)) != null; i++) {
System.out.println(key + …Run Code Online (Sandbox Code Playgroud) 在我的Android应用程序中,我正在尝试切换android-async-http到okhttp支持异步网络sind版本2.0的.虽然前者发布了持久性cookie存储的实现,但我不知道如何实现这样的东西okhttp.
在我的应用程序中,我有一个登录例程,在此期间get发送请求,如果成功,则应设置cookie.此cookie应附加到所有后续网络请求,并应在应用程序重新启动后继续存在.
我在SO上找到了以下答案,表明如果在应用程序的某个地方执行以下代码,则会激活持久性cookie管理并okhttp使用它:
CookieManager cookieManager = new CookieManager();
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
CookieHandler.setDefault(cookieManager);
Run Code Online (Sandbox Code Playgroud)
但是,对我来说它不起作用.是CookieManager正确的方法吗?我如何监控设置和存储哪些cookie以进一步调试问题?
我的应用程序使用 webview 打开一个网页,该网页正在更新网页上进行的某些交互的一些 cookie。现在我想读取该 cookie 并根据 cookie 的值进行一些 UI 调整。
iOs 有一些观察者的实现,可以附加到 cookie 列表并获取任何 cookie 更改发生的通知。
我长期以来一直在搜索类似的解决方案,但找不到任何类型的侦听器或可以附加到 cookie 并了解它们何时更新的东西。
我阅读了所有内容CookieManager并CookieSyncManger
https://developer.android.com/reference/java/net/CookieManager.html
https://developer.android.com/reference/java/net/CookieManager.html
但没有什么帮助。
我知道使用 javascript 接口挂钩是一个更好的解决方案,但目前无法实现,因为该网站已经在生产环境中运行。
我正在开发一个与服务器通信并有登录屏幕的应用程序。我正在使用 httpconnection 与服务器通信(服务器发回 Json 响应)。我的登录屏幕发送电子邮件和密码,由服务器验证 - 服务器发送 cookie 并期望每个进一步请求的 cookie 都知道用户已登录。
我正在使用 Cookiemanager 和 cookie 处理程序来启用会话,以便用户只需登录一次。
在我的主活动中使用以下 2 个命令(在 Create 方法上)
CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);
Run Code Online (Sandbox Code Playgroud)
工作模型是我的主要活动向服务器发送一个读取命令,该命令检查用户是否已经登录(期望内部带有 id 的 cookie),并以 json 形式发送状态。如果状态为 0,则移至登录活动,否则移至主屏幕。
在登录活动中,我发送带有用户名和密码的登录命令,服务器发送一个 cookie(发送一个唯一的 id,它会交叉检查任何进一步的请求以验证用户)并返回 json 响应。
登录后,我转到主屏幕并读取状态,因为我在主活动中创建了 CookieManager,所以它会自动随每个 httprequest 发送 cookie。
问题是——当我退出应用程序并在登录后返回时..它再次从主要活动开始并进入登录屏幕而不是主屏幕。我无法弄清楚为什么会这样,以及如何让我的用户登录一次,之后即使他退出应用程序,它也会保留 cookie。
我认为 CookieManager 即使在退出后也会保留 cookie。是否因为我在创建方法中创建 cookie Manager 对象,并且当应用程序退出并重新启动时,它再次创建新对象?或者我的假设是错误的。