【问题标题】:How to enable session tracking in android application client如何在 Android 应用程序客户端中启用会话跟踪
【发布时间】:2014-02-04 17:06:19
【问题描述】:

我现在正在开发我的第一个 Android 应用程序。

我的应用程序使用 SOAP 消息与 Web 服务交互。 Web 服务位于glassfish4 服务器中。

所以我希望每个与 Web 服务交互的用户都将获得一个代表 Web 服务的类的新实例。

我阅读了如何执行此操作,我需要将 @HttpSessionScope 注释添加到 Web 服务类。

但是我应该在客户端写什么,在 android 应用程序中启用会话跟踪?

谢谢

【问题讨论】:

  • 代码很大,不需要代码,一般问题。我只想知道当客户端是android应用程序时如何从客户端启用会话跟踪。
  • 也许除了@HttpSessionScope注解还有别的解决办法。我也可以使用其他解决方案。
  • 没人知道答案吗?

标签: android web-services session soap


【解决方案1】:

应该有一个用于 android 用户登录的 web 服务。 Web 服务的结果还应该包含登录用户的会话 ID(仅当用户登录时)。 并且可以通过在请求标头(或请求属性)中将会话 ID 作为 cookie 传递来跟踪会话。 这是从this answer 引用的Java 代码,用于发出带有请求属性的请求。

try {
            URL url  = new URL("https://visruthcv.appspot.com/project/listUsers");
            URLConnection con = url.openConnection();

            HttpURLConnection httpUrlConnection = (HttpURLConnection) con;
            httpUrlConnection.setReadTimeout(10000);
            httpUrlConnection.setConnectTimeout(15000);
            httpUrlConnection.setRequestMethod("POST");
            httpUrlConnection.setDoInput(true);
            httpUrlConnection.setDoOutput(true);

            /*
             * for request headers
             */
            httpUrlConnection.setRequestProperty("Accept",
                    "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
            httpUrlConnection.setRequestProperty("Accept-Charset",
                    "ISO-8859-1,utf-8;q=0.7,*;q=0.3");
            httpUrlConnection.setRequestProperty("Accept-Encoding", "gzip,deflate,sdch");
            httpUrlConnection.setRequestProperty("Accept-Language", "en-US,en;q=0.8");
            httpUrlConnection.setRequestProperty("Connection", "keep-alive");
            httpUrlConnection.setRequestProperty("Cookie", "JSESSIONID=9550495DDC72AAC410B07B6C16908CB5");


            /*
             * for adding request parameters
             */
            Map<String, Object> params = new HashMap<String, Object>();
            params.put("username", "Visruth");
            params.put("password", "passwd");

            OutputStream os = httpUrlConnection.getOutputStream();
            BufferedWriter writer = new BufferedWriter(
                    new OutputStreamWriter(os, "UTF-8"));
            writer.write(getQuery(params));
            writer.flush();
            writer.close();
            os.close();

            httpUrlConnection.connect();

            // To write to a file, something like this
            InputStream is = httpUrlConnection.getInputStream();
            FileOutputStream fos = new FileOutputStream("/home/visruth/Desktop/output.txt");
            int i = 0;
            byte[] b = new byte[1024];

            while((i = is.read(b)) != -1) {
                fos.write(b);
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();

        }

在上面的代码中,httpUrlConnection.setRequestProperty("Cookie", "JSESSIONID=9550495DDC72AAC410B07B6C16908CB5"); 将会话 ID (9550495DDC72AAC410B07B6C16908CB5) 设置为请求属性中的 cookie。 cookie 值格式为JSESSIONID=9550495DDC72AAC410B07B6C16908CB5,其中9550495DDC72AAC410B07B6C16908CB5 只是在网络中创建的会话ID。通过添加 cookie 使每个请求都可以跟踪会话。

【讨论】:

    猜你喜欢
    • 2017-08-25
    • 2012-02-06
    • 1970-01-01
    • 2012-05-11
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多