我已经在我的 PHP 服务器上设置了一个登录区域。 members.php 文件需要登录;在我登录后创建一个 session 。 session 持续一段时间。我想让它工作,以便在 session 仍然有效时,java 小程序应该能够访问 members.php 页面。
我已将 Java 小程序嵌入到 members.php 页面中。它发出 HttpURLConnection 请求,但是当我收到响应时,我发现它已被 PHP 服务器重定向到登录页面。
如何正确设置?
这是 Java Applet 代码:
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();
}
}
}
此输出是一个带有一个 JTextField 的 JFrame,其中包含登录页面的输出 HTML。
最佳答案
您需要捕获 PHPSESSID cookie 的值(或您使用的任何 cookie 名称)并将其添加到 HttpURLConnection 中的请求。这可以作为系统参数出现,但如果没有,您可以将 session ID 作为小程序属性嵌入到启动小程序的页面上。 (我还没有专门试验过这部分)
这里有一个教程解释了如何在 URLConnection 类中发送 cookie:http://www.hccp.org/java-net-cookie-how-to.html
具体请参阅标题为在请求中设置 cookie 值的部分。
关于java - 我的 java applet 如何使用我的 PHP 认证 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8556583/