使用带有 Cookie 持久性的改造

Posted

技术标签:

【中文标题】使用带有 Cookie 持久性的改造【英文标题】:using retrofit with Cookie persistence 【发布时间】:2013-09-24 12:42:42 【问题描述】:

伙计们,我正在使用改造,我想知道如何透明地处理会话 cookie。 为此,我扩展了给定的 ApacheClient 并在对 ApacheClient.execute(HttpClient, HttpUriRequest) 的自定义调用中使用 CookieStore :

Client client = new ApacheClient() 
    final CookieStore cookieStore = new BasicCookieStore();
    @Override
    protected HttpResponse execute(HttpClient client, HttpUriRequest request) throws IOException 
        // BasicHttpContext is not thread safe 
        // CookieStore is thread safe
        BasicHttpContext httpContext = new BasicHttpContext();
        httpContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
        return client.execute(request, httpContext);
    
;

RestAdapter restAdapter = new RestAdapter.Builder()
    .setServer(API_URL)
    .setClient(client)
    .build();

有没有更好的方法来使用内置的改造 API(没有 HttpClient 扩展)?

【问题讨论】:

这个答案对你有帮助吗? 不,我需要一个使用改造 API 的跨 HTTP 实现解决方案,如果它存在/但不是 android 的...... 你知道如何实现 cookie 吗? 我仍在使用 BasicCookieStore 和 ApacheClient,但使用 colriot 答案更好,因为您可以使用来自 square (github.com/square/okhttp) 的 Okhttp 【参考方案1】:

从 API 9 开始,您拥有 java.net.CookieManager 并且可以像这样设置系统范围的 cookie 处理程序:

CookieManager cookieManager = new CookieManager();
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
CookieHandler.setDefault(cookieManager);

是的,Apache Http 客户端使用自己的 cookie 处理机制。但这应该不是问题,因为从 API 9 HttpURLConnection 开始推荐使用 HTTP 客户端。 如果您使用 Square 的 Retrofit,您可能还喜欢他们的 OkHttp 库 - 具有许多有用功能的自定义 URLConnection 实现。

【讨论】:

你可以在改造中使用它吗?如果我在我的登录片段上调用它,我可以期望从改造中进行的每个调用都会自动附加 cookie 吗? @Lion789 是的,你可以。但最好将此代码放入您的自定义Application 继任者中。 按应用程序继任者您指的是什么?即这就是我想要做的......@ 987654321@ ---另外,对于accept_all,最好让它成为默认的原始服务器,或者不会让我得到cookie,如果是这样,那么我是否需要做任何额外的事情,因为据我所知,我可以忽略该行,因为它是默认的? @Lion789 我的意思是Application 类的子类。例如,在其onCreate 方法中。 这对我有用,显然没有这个 OkHttp 将不会保存服务器请求设置的任何 cookie(Set-Cookie 标头),但您需要记住使用单个 http 客户端例如,我在 dagger 的帮助下使用 Singleton 解决了这个问题。

以上是关于使用带有 Cookie 持久性的改造的主要内容,如果未能解决你的问题,请参考以下文章

在带有 express-session 的 NodeJS 中使用安全 cookie 时会话不持久

Firefox不允许我使用FormsAuthentication设置持久性cookie

会话 Cookie 与持久性 Cookie

Android HttpClient 持久性 cookie

Cookie 持久性在 OWIN 身份验证中不起作用

如何在 ASP.NET 中创建持久性 cookie?