【问题标题】:How to save session_id as cookie value and send it to server in Android?如何将 session_id 保存为 cookie 值并将其发送到 Android 中的服务器?
【发布时间】:2013-06-05 16:22:50
【问题描述】:

我正在开发一个使用 Web 服务调用的应用程序。

我正在调用我的登录网络服务,如下所示

String url = "http://mydomaim.com/login.php";

        UserFunctions userFunction = new UserFunctions();
        JSONObject json = userFunction.loginUser(userEmail, password, url);

它工作正常,并如下所示向我发送响应

{
 "userName":"a",
   "login_success":1,
   "user_id":"3",
   "session_id":"1067749aae85b0e6c5c5e697b61cd89d",
   "email":"a"
}

我解析了这个响应,并成功地在一个变量中获取了会话 ID。 现在我必须调用一个附加这个 session_id 作为 cookie 值的其他 web 服务。

问题

如何将session_id 存储为我的Android 设备中的cookie 值并调用其他网络服务?

【问题讨论】:

    标签: android json web-services cookies session-cookies


    【解决方案1】:

    试试这个,登录时调用这个请求。

    DefaultHttpClient httpClient = new DefaultHttpClient();
            String paramString = URLEncodedUtils.format(params, "utf-8");
            url += "?" + paramString;
            HttpGet httpGet = new HttpGet(url);
            HttpResponse httpResponse = httpClient.execute(httpGet);
    
            List<Cookie> cookies = httpClient.getCookieStore().getCookies();
            for (Cookie cookie : cookies) {
                System.out.println("Cookie: " + cookie.toString());
    
                if (cookie.getName().contains("PHPSESSID"))
                    guid = cookie.getValue();
    
            }
    
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();
    

    【讨论】:

      【解决方案2】:

      你可以试试这样的:

      public static void myMethod(Map<String, String> cookies) throws IOException, PortalException {
      
              HttpParams httpParams = new BasicHttpParams();
      
              HttpConnectionParams.setConnectionTimeout(httpParams, 60000);
      
              HttpConnectionParams.setSoTimeout(httpParams, 240000);
      
              try {
      
                  DefaultHttpClient httpClient = new DefaultHttpClient(connectionManager, httpParams);
      
                  if (cookies != null) {
      
                      for (Map.Entry<String, String> entry : cookies.entrySet()) {
      
                          BasicClientCookie cookie = new BasicClientCookie(entry.getKey(), entry.getValue());
      
                          cookie.setPath("/");
                          cookie.setDomain(new URL(url).getHost());
      
                          httpClient.getCookieStore().addCookie(cookie);
                      }
                  }
      
                  HttpRequestBase request = null;
      
                  if (post) {
      
                      request = post(url, params, headers);
      
                  } else {
      
                      request = get(url, params, headers);
      
                  }
      
                  BasicHttpContext context = new BasicHttpContext();
      
                  HttpResponse response = httpClient.execute(request, context);
      
                          //... etc
      

      它对我有用。

      【讨论】:

      • 我有一个对象登录,其中存储了我的 cookie,但我认为这不是您要查找的...让我看看,如果您的会话过期,存储此 cookie 有意义吗?我不这么认为...创建一个 DefaultHttpClient 设置您的 cookie 并将其用于您的所有请求怎么样?这样您就可以在内存中持续存在,直到您的应用程序完成
      • 请看一下这个链接我的新问题
      猜你喜欢
      • 1970-01-01
      • 2018-08-30
      • 1970-01-01
      • 2015-10-27
      • 1970-01-01
      • 2015-11-07
      • 2014-06-16
      • 2011-09-16
      • 1970-01-01
      相关资源
      最近更新 更多