0

在第一个屏幕中的我的 android 应用程序中,用户使用会话 id 进行身份验证和 servlet 回复......在第二个屏幕中,用户再次调用 servlet,并将 url 中添加的会话 id 作为 ;jsession="sessionid" 以及参数。 ..

但是 servlet 没有获得会话 id,而是作为一个没有身份验证的新会话进行响应......

问题出在哪里?

我正在使用此代码进行连接

                    URL u = new URL(aurl[0]);
        url=aurl[0];
        publishProgress(""+20,"Connecting...");
        HttpURLConnection c = (HttpURLConnection) u.openConnection();
        publishProgress(""+40,"Connecting...");
        c.setRequestMethod("GET");
        c.setDoOutput(true);
        c.connect();

        publishProgress(""+45,"Connecting...");
        publishProgress(""+40,aurl[0]);
        int lenghtOfFile = c.getContentLength();
        System.out.println(lenghtOfFile+"lenghtOfFile");

        is = c.getInputStream();
4

2 回答 2

2

我遇到了同样的问题,并找到了一个简单的解决方案。

// 首先设置默认的cookie管理器。

CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));

// 以下所有后续 URLConnections 将使用相同的 cookie 管理器。

URLConnection 连接 = 新 URL(url).openConnection();

// ...

连接 = 新 URL(url).openConnection();

// ...

连接 = 新 URL(url).openConnection();

// ...

这是我找到的最简单的解决方案。我们需要设置默认的 CookieManager。 使用 java.net.URLConnection 触发和处理 HTTP 请求是一个很棒的博客。

谢谢

于 2012-12-18T09:59:04.527 回答
1

在 url 中添加 jseesioid 从来没有用过.. 代码使用这个解决方案工作

http会话管理

尤其是这两...

 // Gather all cookies on the first request.
URLConnection connection = new URL(url).openConnection();
List<String> cookies = connection.getHeaderFields().get("Set-Cookie");
// ...

// Then use the same cookies on all subsequent requests.
connection = new URL(url).openConnection();
for (String cookie : cookies) {
connection.addRequestProperty("Cookie", cookie.split(";", 2)[0]);
 }
 // ...
于 2012-09-25T09:47:45.920 回答