Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/07/2013, 05:11
john88
 
Fecha de Ingreso: diciembre-2011
Mensajes: 17
Antigüedad: 13 años
Puntos: 0
Respuesta: Enviar cookies en http en android

Me auto respondo...después de mucho dar vueltas he conseguido mantener una sesión con el servidor, no creo que sea la forma mas correcta de hacerlo pero de momento a mi me vale. Aquí os dejo el código por si alguien se topa con el mismo problema:
Código Java:
Ver original
  1. public class Httppostaux{
  2.  
  3.     InputStream is = null;
  4.     String result = "";
  5.     SharedPreferences preferCookies;
  6.  
  7.     public JSONArray getserverdata(ArrayList<NameValuePair> parameters, String urlwebserver,SharedPreferences preferens ){
  8.         //conecta via http y envia un post.
  9.         preferCookies=preferens;
  10.         httppostconnect(parameters, urlwebserver);
  11.         if (is!=null){//si obtuvo una respuesta
  12.             getpostresponse();
  13.             return getjsonarray();
  14.         }else{
  15.             return null;
  16.         }
  17.     }
  18.  
  19.  
  20.  
  21.     //peticion HTTP
  22.     private void httppostconnect(ArrayList<NameValuePair> parametros, String urlwebserver){
  23.  
  24.         SharedPreferences.Editor editor = preferCookies.edit();
  25.  
  26.         try{
  27.             DefaultHttpClient httpclient = new DefaultHttpClient();
  28.  
  29.             HttpPost httppost = new HttpPost(urlwebserver);
  30.             httppost.setEntity(new UrlEncodedFormEntity(parametros));
  31.             //ejecuto peticion enviando datos por POST
  32.             HttpResponse response = httpclient.execute(httppost);
  33.             List<Cookie> cookies = httpclient.getCookieStore().getCookies();
  34.             HttpEntity entity = response.getEntity();
  35.  
  36.             if (cookies.isEmpty()) {
  37.                 Log.d("login","No se recivieron cookies");
  38.             } else {
  39.  
  40.                
  41.                 for (int i = 0; i < cookies.size(); i++) {
  42.                     if (cookies.get(i).getName().contentEquals("cook_usu"))
  43.                     {
  44.                         editor.putString("cook_usu",cookies.get(i).getValue());
  45.                         editor.putInt("version",cookies.get(i).getVersion());
  46.                         editor.putString("domain",cookies.get(i).getDomain());
  47.                         editor.putString("path",cookies.get(i).getPath());
  48.                         editor.commit();
  49.                     }
  50.                     if(cookies.get(i).getName().contentEquals("PHPSESSID"))
  51.                     {
  52.                        editor.putString("PHPSESSID",cookies.get(i).getValue());
  53.                        editor.commit();
  54.                        //PHPSESSID = cookies.get(i).getValue();
  55.                     }
  56.                 }
  57.             }
  58.             is = entity.getContent();
  59.         }catch(Exception e){
  60.             Log.e("log_tag", "Error in http connection "+e.toString());
  61.         }
  62.     }
  63.  
  64.     public void getpostresponse(){
  65.  
  66.         //Convierte respuesta a String
  67.         try{
  68.             BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
  69.             StringBuilder sb = new StringBuilder();
  70.             String line = null;
  71.             while ((line = reader.readLine()) != null) {
  72.                 sb.append(line + "\n");
  73.             }
  74.             is.close();
  75.             //devolvemos la respuesta del servidor
  76.             result=sb.toString();
  77.            
  78.         }catch(Exception e){
  79.             Log.e("log_tag", "Error converting result "+e.toString());
  80.         }
  81.     }
  82.  
  83.     public JSONArray getjsonarray(){
  84.         //parse json data
  85.         try{
  86.             JSONArray jArray = new JSONArray(result);
  87.             return jArray;
  88.         }
  89.         catch(JSONException e){
  90.             Log.e("log_tag", "Error parsing data "+e.toString());
  91.             return null;
  92.         }
  93.     }
  94. }
  95.  
  96. Esta es la clase con la que me logeo y luego si es correcto el login guardo las cookies en un SharedPreferences para asi poder mandar esos paramaetros en las posteriores peticiones al servidor. Como por ejemplo la siguiente:
  97.  
  98. aqui le paso por referencia el SharedPreferences declarado en el activity.para poder acceder a los paramatros de las cookeis
  99.  
  100. public class HttpGetAux {
  101.  
  102.     public String executeHttpGet(String url,SharedPreferences MisPrefers) throws Exception
  103.     {
  104.         BufferedReader in = null;
  105.         try
  106.         {
  107.             String phpsessid = MisPrefers.getString("PHPSESSID","");
  108.             String cook_usu = MisPrefers.getString("cook_usu","");
  109.             int version = MisPrefers.getInt("version",0);
  110.             String domain = MisPrefers.getString("domain","");
  111.             String path = MisPrefers.getString("path","");
  112.  
  113.  
  114.             DefaultHttpClient client = new DefaultHttpClient();
  115.             CookieStore cookieStore = new BasicCookieStore();
  116.             //Creamos dos variables BasicClientCookie y las rellenamos con nuestros parametros almacenados de las cookies
  117.             BasicClientCookie cookie1 = new BasicClientCookie("PHPSESSID", phpsessid);
  118.             cookie1.setVersion(version);
  119.             cookie1.setDomain(domain);
  120.             cookie1.setPath(path);
  121.             BasicClientCookie cookie2 = new BasicClientCookie("cook_usu",cook_usu);
  122.             cookie2.setVersion(version);
  123.             cookie2.setDomain(domain);
  124.             cookie2.setPath(path);
  125.  
  126.             client.getCookieStore().addCookie(cookie1);
  127.             client.getCookieStore().addCookie(cookie2);
  128.             HttpGet request = new HttpGet();
  129.             request.setURI(new URI("http://" + url));
  130.  
  131.          
  132.             HttpResponse response = client.execute(request);
  133.             in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
  134.             StringBuffer sb = new StringBuffer("");
  135.             String line = "";
  136.             String NL = System.getProperty("line.separator");
  137.             while ((line = in.readLine()) != null)
  138.             {
  139.                 sb.append(line + NL);
  140.             }
  141.             in.close();
  142.             return sb.toString();
  143.         }
  144.         finally
  145.         {
  146.             if (in != null)
  147.             {
  148.                 try
  149.                 {
  150.                     in.close();
  151.                 }
  152.                 catch (IOException e)
  153.                 {
  154.                     e.printStackTrace();
  155.                 }
  156.             }
  157.         }
  158.     }
  159.  
  160. }

Espero que a alguien le sirva, y si existe una forma mas correcta de hacerlo, por favor que lo publique.Gracias.