Usando una session con php e Java

Attualmente sto cercando di utilizzare la session corrente di una pagina Web di php da un'applet. Pensavo che sarebbe stato semplice, ma non è stato così semplice come lo sono io. Dall'uomo php :

session_start() creates a session or resumes the current one based on a session identifier passed via a GET or POST request, or passed via a cookie. 

Da lì ho fatto qualche php (semplificato qui):

 // PAGE1.PHP session_start(); $_SESSION['test'] = true; echo "sid=" . session_id(); // PAGE2.PHP session_start(); if ($_SESSION['test']) $echo "success"; else $echo "fail"; 

Quindi, dalla mia applet, faccio una richiesta a PAGE1.PHP e mi restituisce l'id di session. Quando faccio una nuova richiesta sulla pagina 2, passo l'id della session come parametro e sembra che la session non sia stata mantenuta. Io uso

 URL url = new URL("my/url/PAGE2.php?sid=" + session_id); URLConnection conn = url.openConnection(); conn.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write(data); // data is the post data created previously wr.flush(); // Get the response BufferedReader rd = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line; while ((line = rd.readLine()) != null) { System.out.println(line); } 

Ho provato tramite il metodo POST e GET e non sembra funzionare.

Quindi mi chiedo se è ansible, e se sì, cosa mi manca?

Grazie.

Il tuo PAGE2.php non sta effettivamente utilizzando il parametro sid che stai passando tramite _GET per avviare la session.

In page2.php, prova:

 session_id($_GET['sid']); session_start(); 

invece di semplice-vecchio:

 session_start(); 

Accettare gli ID di session come parte del GET è una ctriggers forma e una ctriggers idea di sicurezza. Ti suggerisco di recuperare l'ID di session dal cookie PHPSESSION con qualcosa di simile:

Seguendo java snippet è stato copiato spudoratamente da qui – Date un'occhiata a questo (sebbene sia specifico per Java 1.4).

 public String getCookie() { /* ** get all cookies for a document */ try { JSObject myBrowser = (JSObject) JSObject.getWindow(this); JSObject myDocument = (JSObject) myBrowser.getMember("document"); String myCookie = (String)myDocument.getMember("cookie"); if (myCookie.length() > 0) return myCookie; } catch (Exception e){ e.printStackTrace(); } return "?"; } public String getCookie(String name) { /* ** get a specific cookie by its name, parse the cookie. ** not used in this Applet but can be useful */ String myCookie = getCookie(); String search = name + "="; if (myCookie.length() > 0) { int offset = myCookie.indexOf(search); if (offset != -1) { offset += search.length(); int end = myCookie.indexOf(";", offset); if (end == -1) end = myCookie.length(); return myCookie.substring(offset,end); } else System.out.println("Did not find cookie: "+name); } return ""; } 

Altrove nel tuo codice prendi l'id della session usando:

  getCookie("PHPSESSION"); // replace this with the cookie name in your /etc/php.ini 

e impostalo nella tua applet.

  conn.setRequestProperty("Cookie", "PHPSESSION=value"); 

Sono disponibili molte più informazioni aggiornate sulla pagina sun java cookie