Использование сеанса с php и Java - PullRequest
3 голосов
/ 29 июня 2010

В настоящее время я пытаюсь использовать текущий сеанс веб-страницы php из апплета. Я думал, что это будет просто, но это не так гладко, как я. От php man :

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.

Оттуда я сделал несколько php (здесь упрощенно):

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

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

Итак, из моего апплета я делаю запрос к PAGE1.PHP, и он возвращает мне идентификатор сеанса. Когда я делаю новый запрос на странице 2, я передаю идентификатор сеанса в качестве параметра, и кажется, что сеанс не был сохранен. Я использую

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

Я пытался с помощью методов POST и GET, но, похоже, он не работает.

Так что мне интересно, возможно ли это, и если да, то что мне не хватает?

спасибо.

Ответы [ 2 ]

4 голосов
/ 29 июня 2010

Принимать идентификаторы сессий как часть GET - это плохая форма и плохая идея с точки зрения безопасности.Я бы посоветовал вам извлечь идентификатор сеанса из файла cookie PHPSESSION с помощью чего-то вроде:

Следующий фрагмент кода Java был бесстыдно скопирован отсюда - Посмотрите на это (хотя это специфично для 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 "";
    }

В другом месте вашего кода захватите идентификатор сеанса, используя:

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

и установите его в своем апплете.

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

Гораздо более актуальная информациядоступно на странице Sun Java Java

3 голосов
/ 29 июня 2010

Ваш PAGE2.php фактически не использует параметр sid, который вы передаете через _GET, чтобы инициировать сеанс.

В page2.php попробуйте:

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

вместо простого- старый:

session_start();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...