0

我正在编写一个客户端 j2me 应用程序,它使用 post 方法连接到基于 php 的 api。出于安全目的,应用程序和 api 应在 30 分钟超时的会话中进行交互。我的问题是,即使会话超时尚未完成,应用程序用户也必须继续登录。我的 php 代码很好,因为我已经在浏览器上对其进行了测试,并且运行良好;但是,但应用程序失败了,我必须继续登录。我可能错过了什么吗?这些是使用我的 Java 应用程序发送到服务器的标头。

String phonenumber = this.phonenumberTextbox.getString();
String password = this.passwordTextBox.getString();
HttpConnection httpConn = null;
String url = "http://192.168.56.1/?action=login-user";
InputStream is;
OutputStream os;
is = null;
os = null;
String sReply = "";
boolean loggedIn = false;
try {
    // Open an HTTP Connection object
    httpConn = (HttpConnection) Connector.open(url);
    // Setup HTTP Request to POST
    httpConn.setRequestMethod(HttpConnection.POST);
    httpConn.setRequestProperty("User-Agent", "Profile/MIDP-1.0 Confirguration/CLDC-1.0");
    httpConn.setRequestProperty("Accept_Language", "en-US");
    //Content-Type is must to pass parameters in POST Request
    httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
           os = httpConn.openOutputStream();
    String params;
    params = "phonenumber=" + phonenumber + "&password=" + password;
    os.write(params.getBytes());

    // Read Response from the Server
    StringBuffer sb = new StringBuffer();
    is = httpConn.openDataInputStream();
    int chr;
    while ((chr = is.read()) != -1) {
        sb.append((char) chr);
    }
    // Web Server just returns stuff         
    sReply = sb.toString();
} catch (IOException ex) {
    System.out.println("Cannot find server");
} finally {
    if (is != null) {
        try {
            is.close();
        } catch (IOException ex) {
        }
    }
    if (os != null) {
        try {
            os.close();
        } catch (IOException ex) {
        }
    }
    if (httpConn != null) {
        try {
            httpConn.close();
        } catch (IOException ex) {
        }
    }
}
// do something with sReply
4

1 回答 1

1

这些天在 PHP 中的默认做法** 在处理会话时,如果 PHP 生成一个 cookie 供客户端存储。您的 java 客户端必须存储此 cookie(默认情况下称为 phpsessid,但任何称职的 PHP 程序员都会更改 cookie 名称),并将其显示在后续请求的 HTTP 标头中。

我对 Java 中的 HTTP 支持不是很熟悉,但如果它类似于 curl,它将包含用于设置和检索 cookie 的选项。

** 过去可以在发出请求时通过查询字符串(GET 参数)传递会话令牌,但由于这非常不安全并泄露了潜在的敏感信息,因此它不再使用,甚至可能不再可用一个选项。

于 2013-08-29T11:42:45.543 回答