2010-06-28 6 views
3

J'essaie actuellement d'utiliser la session en cours d'une page Web php à partir d'une applet. Je pensais que ce serait simple, mais ça ne s'est pas passé aussi bien que moi. De l'php man:Utilisation d'une session avec php et Java

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. 

De là, je l'ai fait un peu de PHP (simplifié ici):

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

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

Alors, de mon applet, je fais une demande de page1.php et il me retourne l'identifiant de session . Lorsque je fais une nouvelle requête sur la page 2, je passe l'identifiant de la session en paramètre et il semble que la session n'a pas été conservée. J'utilise

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); 
} 

J'ai essayé via la méthode POST et GET et cela ne semble pas fonctionner.

Alors je me demande si c'est possible, et si oui, qu'est-ce qui me manque?

merci.

Répondre

3

Votre fichier PAGE2.php n'utilise pas réellement le paramètre sid que vous transmettez via _GET pour lancer la session.

En page2.php, essayez:

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

au lieu de vieux plaine:

session_start(); 
+1

J'ai essayé sans succès. Après avoir relu la page de manuel, il semble que session_start est vide. Donc c'est normal que ça ne marche pas. – Sauleil

+1

vous êtes en fait à la recherche de 'session_id ($ _ GET ['sid']); session_start(); ' –

+0

Merci Frank! J'ai mal lu le doc à propos de session_id. J'ai du mal à créer une nouvelle session en appelant ça. Maintenant ça fonctionne comme un charme! – Sauleil

4

Accepter les ID de session dans le cadre de l'EEG est mauvaise forme, et une mauvaise sécurité sage idée. Je suggère que vous récupériez l'ID de session à partir du cookie PHPSESSION avec quelque chose comme:

Après java snippet était sans vergogne copied from here - Jetez un coup d'oeil à cela (bien qu'il soit spécifique à 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 ""; 
    } 

Ailleurs dans votre grab code l'identifiant de session en utilisant:

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

et mettez-le dans votre applet.

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

informations actuelles bien plus est disponible à l'

+0

C'est peut-être une question stupide, mais quelle est la différence de sécurité entre passer l'identifiant de session via GET/POST et cookie? (En outre, je crypte mes données entre php et Java en utilisant post) – Sauleil