3

我正在开发一个与服务器对话并具有登录屏幕的应用程序。我正在使用 httpconnection 与服务器通信(服务器发回 Json 响应)。我的登录屏幕发送电子邮件和密码,由服务器验证 - 它发送 cookie 并期望 cookie 与每个进一步的请求一起知道该用户已登录。

我正在使用 Cookiemanager 和 cookie 处理程序来启用会话,以便用户只需登录一次。

在我的主要活动中使用以下 2 个命令(在创建方法上)

CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);

工作模式是我的主要活动向服务器发送一个读取命令,它检查用户是否已经登录(期望内部带有 id 的 cookie),并以 json 格式发送状态。如果状态为 0,则移至登录活动,否则移至主屏幕。

在登录活动中,我发送带有用户名和密码的登录命令,服务器发送一个带有 json 响应的 cookie(发送一个唯一的 id,它对任何进一步的请求进行交叉检查以验证用户)。

登录后,我移动到主屏幕并读取状态,因为我在主活动中创建了 CookieManager,它会自动发送每个 httprequest 的 cookie。

问题是 - 当我退出应用程序并在登录后返回时......它再次以主要活动开始并进入登录屏幕而不是主屏幕。我无法弄清楚为什么会这样以及如何让我的用户登录一次,然后即使他退出应用程序,它也会保留 cookie。

我认为 CookieManager 即使在您退出后也会保留 cookie。是因为我在创建方法中创建了 cookie Manager 对象,而当应用程序退出并重新启动时,它再次创建了新对象?或者我的假设是错误的。

4

2 回答 2

1

默认情况下new CookieManager()会将 cookie 存储在内存中

但是,您可以使用不同的构造函数来更改此行为: CookieManager(CookieStore store, CookiePolicy cookiePolicy).

至少有几个持久的java.net.CookieStore实现:

于 2016-01-01T20:50:33.383 回答
-1
If I move the Cookiemanager to the application class, it's just get called once and solve this issue. 

public class application extends Application {
    private static Context context;
    @Override
    public void onCreate() {
        super.onCreate();
            CookieManager cookieManager = new CookieManager();
            CookieHandler.setDefault(cookieManager);
    }

    public static Context getContext() {
        return application.context;
    }
于 2016-02-09T00:40:24.017 回答