2013-08-23 2 views
1

У нас есть настройка фреймворка django, и вход в django работает. Нам нужно получить этот идентификатор сеанса на андроиде, и я не уверен, как мы можем это сделать. Поэтому, если мы создаем http-сообщение от android, нам нужен идентификатор сеанса из django, который мы можем использовать для будущего сообщения и получать запросы от этого пользователя.Django session id на android

+0

Вы нашли решение для этого. –

ответ

1

Для этого вам необходимо поддерживать сеанс. И для поддержания сеанса есть две возможности:

1) Используйте один DefaultHttpClient для всех запросов.

Этот подход не будет работать, если вы хотите одновременно вызвать несколько запросов.

2) Синхронизация общих куки-файлов между несколькими соединениями DefaultHttpClient.

public static List<Cookie> cookies; 

чтения куки сессии после входа в систему.

HttpResponse WSresponse = httpclient.execute(httppost); 


       try { 
        cookies = httpclient.getCookieStore().getCookies(); 
        sync(); 
       } catch (Exception e) { 
       } 

public static DefaultHttpClient getHttpclient() { 

     HttpParams httpParameters = new BasicHttpParams(); 
     HttpConnectionParams.setConnectionTimeout(httpParameters, timeOut); 
     HttpConnectionParams.setSoTimeout(httpParameters, timeOut); 
     DefaultHttpClient httpclient = new DefaultHttpClient(httpParameters); 

     if (cookies != null) { 
      int size = cookies.size(); 
      for (int i = 0; i < size; i++) { 
       httpclient.getCookieStore().addCookie(cookies.get(i)); 
      } 
     } 
     return httpclient; 
    } 

UPDATE:

public void sync() { 
     if (cookies != null) { 

      CookieManager cookieManager = CookieManager.getInstance(); 
      cookieManager.setAcceptCookie(true); 
      for (Cookie cookie : cookies) { 

       Cookie sessionInfo = cookie; 
       String cookieString = sessionInfo.getName() + "=" + sessionInfo.getValue() + "; domain=" + sessionInfo.getDomain(); 
       cookieManager.setCookie("http://yourdomain.com", cookieString); 
       CookieSyncManager.getInstance().sync(); 
      } 
     } 
    } 

Этот sync() метод используется для управления сессии для HttpClient и WebView/browser.That, если вы хотите, чтобы выполнить что-то, как вы войти в из нативного приложения и хотите, чтобы какая-то конкретная операция в webview требовала входа в систему, этот метод будет управлять общим сеансом между приложением и веб-браузером/браузером.

+0

Что это за функция синхронизации? –