【问题标题】:Maintaining cookies between HTTP requests sent by Android Apps在 Android 应用程序发送的 HTTP 请求之间维护 cookie
【发布时间】:2012-09-22 03:12:25
【问题描述】:

我正在构建一个 Android 应用,以在 Android 手机上提供网站的功能。

人们需要登录,并且他们使用 cookie 保持登录状态,允许他们在自己的帐户下做事。该网站的所有登录/身份验证代码都已完成,我现在正在编写一个 Android 应用程序来做同样的事情。

我的问题是,如果 Android 应用程序向 PHP 服务器发送 HTTP 请求,并且服务器设置了一些 cookie(以显示用户已登录),那么这些 cookie 是否会一直设置在 Android 应用程序上?未来对服务器的 HTTP 请求?

或者,我是否需要为 android 制定一个新的身份验证方案,例如在用户登录时将一个特殊令牌传递给应用程序,以及在所有未来请求对用户进行身份验证时提供此令牌的应用程序?

【问题讨论】:

    标签: java android authentication mobile cookies


    【解决方案1】:

    一旦您登录应用程序,您应该将令牌保存在SharedPrefrences。您可以稍后在每个 Http 请求中使用。即使应用程序重新启动,您也有该令牌。所以 SharedPredPrefrence 更好。

    【讨论】:

    • 但这意味着我必须在服务器上重新编写验证码。如果有办法改用 cookie,那就更好了。
    【解决方案2】:

    您应该使用CookieManagerCookieStore 来保存Cookie。

    CookieManager 会将每个传入的 HTTP 响应的 cookie 存储到 CookieStore 中,并为每个传出的 HTTP 请求检索 cookie。过期的 HttpCookies 应自行从该存储中删除。

    您可以将此与 HttpURLConnection 类一起使用。

    【讨论】:

    • get(URI uri) Retrieves cookies that match the specified URI 这是否意味着我需要发出两个 HTTP 请求,第一个检查用户的登录信息是否正确,然后第二个获取 cookie?
    • 恐怕我没有直接使用 Cookie 管理器,但一位同事建议遵循 HttpURLConnection 文档中的模式developer.android.com/reference/java/net/HttpURLConnection.html
    【解决方案3】:

    登录后放入SharedPreferences

    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString("userName", "Rock");
    editor.putString("token", "token@123");
    

    SharedPreferences获取

    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
    String username = sharedPreferences.getString("userName", "");
    String token = sharedPreferences.getString("token", "");
    

    【讨论】:

      猜你喜欢
      • 2011-10-26
      • 2014-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 2011-02-01
      相关资源
      最近更新 更多