PHPサーバーにログインエリアを設定しました。 members.phpファイルにはログインが必要です。ログイン後、セッションが作成されます。セッションはしばらく続きます。私はセッションがまだ有効な間にJavaアプレットがmembers.phpページにアクセスできるようにこの作業をしたいと思います。私のJavaアプレットは、PHPで認証されたセッションをどのように使用できますか?
私はJavaアプレットをmembers.phpページに埋め込んでいます。それはHttpURLConnectionリクエストを行いますが、私がレスポンスを得ると、PHPサーバによってログインページにリダイレクトされたことがわかります。
これを正しく設定するにはどうすればよいですか?ここで
は、Javaアプレットのコードです:
import java.applet.Applet;
import java.awt.Dimension;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class phpConnectApplet extends Applet {
private static final long serialVersionUID = 1L;
public void init() {
URL url = null;
try {
url = new URL("http://www.example.com/members.php");
URLConnection urlConn = url.openConnection();
HttpURLConnection httpConn = (HttpURLConnection) urlConn;
httpConn.setDoOutput(true);
httpConn.setDoInput(true);
httpConn.setUseCaches(false);
httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
DataOutputStream output = new DataOutputStream(httpConn.getOutputStream());
String content = "action=blah"; //just to test the PHP file
output.writeBytes(content);
output.flush();
output.close();
DataInputStream in = new DataInputStream(urlConn.getInputStream());
BufferedReader input = new BufferedReader(new InputStreamReader(in));
String str, result = "";
while ((str = input.readLine()) != null) {
result = result + str + "\n";
}
input.close();
Map<String, List<String>> headers = httpConn.getHeaderFields();
List<String> values = headers.get("Set-Cookie");
String cookieValue = null;
for (String v:values) {
if (cookieValue == null)
cookieValue = v;
else
cookieValue = cookieValue + ";" + v;
}
System.out.println(cookieValue);
JFrame f = new JFrame("App Title");
f.add(new JTextArea(result));
f.setMaximumSize(new Dimension(400,300));
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
} catch (MalformedURLException me) {
me.printStackTrace();
} catch(IOException ie) {
ie.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
}
}
このため、出力は、ログインページの出力HTMLが含まれている1のJTextFieldとJFrameのです。
PHPでのテストを行って、これらの値を示した: 'セッション名:\t PHPSESSID セッションID:\t 917bcaa8e ------------ 329035f0640' 'クッキー:\t 'PHPSESSID':\t " 917bcaa8e ------------ 329035f0640 ' Cookie:\t' X-mapping-kjicghkc ':\t' 9EE581364 ------------ 955DBE039A8 ' 第2クッキーX -Mapping-kjicghkcとその後のキーは、Java Appletに登場するものです。それを使うべきか、PHPSESSIDだけを探しているべきですか? – Ozzy
あなたはそれを見て両方が必要です。 PHPSESSIDはあなたのアプリケーションから来ています。私はそれをX-Mappingというものから推測しています - ????????ロードバランサのものですが、後者は個人的には見たことがありません。 – SplinterReality
実際、あなたが私に与えたリンクからクラスを使用した後、Webサーバーにアプレットをもう一度アップロードしました...今すぐ動作します!アプレットはクッキーを設定するだけでメンバーエリアを見ることができます。 'cm.setCookies(conn2);'はリンク内のそのクラスの魔法です。ありがとう:) – Ozzy