相关疑难解决方法(0)

浏览器cookie域如何工作?

由于我遇到了奇怪的域/子域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.

cookies dns rules http path

361
推荐指数
6
解决办法
20万
查看次数

如果HttpURLConnection与CookieManager自动处理会话cookie?

我有一个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)

java cookies httpurlconnection cookiemanager

27
推荐指数
1
解决办法
4万
查看次数

在Android上使用okhttp 2的持久Cookie存储

在我的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以进一步调试问题?

cookies android okhttp

14
推荐指数
2
解决办法
2万
查看次数

如何监听 Android Webview 中的任何 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 接口挂钩是一个更好的解决方案,但目前无法实现,因为该网站已经在生产环境中运行。

android android-webview

6
推荐指数
1
解决办法
2377
查看次数

当您关闭应用程序时,CookieManager 是否会丢失 cookie?

我正在开发一个与服务器通信并有登录屏幕的应用程序。我正在使用 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 对象,并且当应用程序退出并重新启动时,它再次创建新对象?或者我的假设是错误的。

java authentication cookies android android-cookiemanager

5
推荐指数
1
解决办法
2334
查看次数