JAVA Applet más sessiont használ, mint a böngésző - JAVA applet uses a new session when call PHP

Default book

Hungarian

Amikor egy JAVA applet van egy oldalon (Flash is lehet) az nem ugyanazt a session Id-t használja, mint amit maga az oldal, ezért a szerver oldali PHP kód másik böngész?nek ismeri fel. A megoldás:

  • A PHP kód a web oldal legenerálásakor beírja az applet definíciójába az aktuális session azonosítót a session_id() függvény segítségével.
  • Amikor a JAVA applet elindul a weboldalról ezt a paramétert beolvassa a getParameter() függvénnyel és letárolja egy String típusú változóban.
  • Amikor a JAVA meghívja a szerver oldali scriptet, az url-hez hozzáfűzi az aktuálisan lementett session Id-t.
  • A szerver oldali script figyeli, hogy a $_GET paraméterek között ott van-e egy megadott nevű paraméter és ha igen, akkor azzal a paraméterrel nyitja meg a session-t. Alul van egy kód a megoldás bemutatására.

Példakód:

Applet kód a html oldalon

<applet code="DataGrid" archive="DataGrid.jar"mayscript>
  ...
  <param name="SID" value="abcdef11376671d3evrh5qnvnvun5"> //actual session ID
</applet>

JAVA kód az appletben:

private String SID;
....
SID = getParameter("SID");
...
URL url=null;
URLConnection con=null;
String sURL = "server.php?cmd=FUNC:MuszerRow:"+id+"&sid="+SID;
try {
  url = new URL(getCodeBase(), sURL);
  con = url.openConnection();
  con.connect();
  BufferedReader input = new BufferedReader(new InputStreamReader(con.getInputStream()));
  String s = input.readLine(); 
  ...
}catch(Exception e){
   System.out.print("Error: " + e.toString() );
}

Szerver oldali script a server.php kódban

<?php
  session_start();
  if(isset($_GET["sid"]) && (session_id() != $_GET["sid"])){
    session_write_close();
    session_id($_GET["sid"]);
    session_start();
  }
....
?>