Foros del Web » Programando para Internet » Android »

Enviar cookies en http en android

Estas en el tema de Enviar cookies en http en android en el foro de Android en Foros del Web. Hola! Mi problema es el siguiente.Estoy desarrollado una aplicación que después de un login,necesita hacer una serie de peticiones al servidor...la cuestión es que necesito ...
  #1 (permalink)  
Antiguo 24/07/2013, 18:18
 
Fecha de Ingreso: diciembre-2011
Mensajes: 17
Antigüedad: 12 años, 4 meses
Puntos: 0
Enviar cookies en http en android

Hola!

Mi problema es el siguiente.Estoy desarrollado una aplicación que después de un login,necesita hacer una serie de peticiones al servidor...la cuestión es que necesito almacenar las cookies una vez se logea, para poder posteriormente hacer una petición al servidor con las variables de sesión que se le proporcionaron a la app cuando se logeo. lo que básicamente busco es la manera de mantener la sesión entre la app y el servidor...soy bastante nuevo en esto y llevo tiempo buscando por foros pero no encuentro la solución. si alguien me echase una mano le estaría muy agradecido.
  #2 (permalink)  
Antiguo 25/07/2013, 05:11
 
Fecha de Ingreso: diciembre-2011
Mensajes: 17
Antigüedad: 12 años, 4 meses
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.

Etiquetas: app, cookies
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:11.