Android ksoap2会话cookie管理

时间:2012-03-09 18:54:46

标签: java android .net web-services ksoap2

我的应用程序假设连接Web服务并激活他的一些功能。 首先,应用程序激活一个“登录”功能,该功能作为参数用户名和密码,该功能搜索数据库中的用户名和密码,如果我是否登录则返回给我。并为我创建一个会话变量,如:

Session["Username"] = User.Username;

Session["FullName"] = User.FullName;

以及更多......

并且我希望激活另一个webservice函数 - UpdateProfile 这会改变我在数据库中的个人资料值。

所以,我的应用程序有一个包含一些私有类的类(asynctasks) 每个asynctask都负责Web服务中的一个功能。

例如

- 登录asynctask:

private class LoginAsyncTask extends AsyncTask<String, String, User>
{

    private String METHODNAME = "Login";
    private String SOAPACTION = "http://tempuri.org/Login";

以及更多......

在这个登录asynctask我解析像这样的回传cookie:

cookies is a HashMap<String, String>();

    try
    {

        //respHeaders = trans.call(SOAPACTION, envelope, null);
        reshttpHeaders = trans.call(SOAPACTION, envelope, null);

    }
    catch (Exception e)
    {
        //connection error.
        e.printStackTrace();
        return null;
    }
   cookies.clear();
        if (reshttpHeaders!=null) {
            for (int i = 0; i < reshttpHeaders.size(); i++) {
                HeaderProperty hp = (HeaderProperty)reshttpHeaders.get(i);
                String key = hp.getKey();
                String value = hp.getValue();
                if (key!=null && value!=null) {
                    if (key.equalsIgnoreCase("set-cookie")){
                        String cookieString = value.substring(0,value.indexOf(";") );

                        cookies.put(cookieString.substring(0, cookieString.indexOf("=")),cookieString.substring(cookieString.indexOf("=")+1) );
                        break;
                    }
                }
            }

        }

而且,在另一个名为UpdateProfileAsynctask的asynctask中 我发送这样的cookie:

        List<HeaderProperty> httpHeaders = new ArrayList<HeaderProperty>();
        for (String cookie:cookies.keySet()) {
            httpHeaders.add(new HeaderProperty("Cookie", cookie + "=" + cookies.get(cookie)));
        }

        try
        {

            //trans.call(SOAPACTION, envelope, reqHeaders);
            trans.call(SOAPACTION, envelope, httpHeaders);
        }

当我尝试使用wireshark捕获此数据包时,我看到我得到的cookie是: Set-Cookie:ASP.NET_SessionId = kmwn4l2qzc0k1anfk1du4ty1;路径= /;仅Http \ r \ n

我发送的cookie是: Cookie:ASP.NET_SessionId = kmwn4l2qzc0k1anfk1du4ty1 \ r \ n

问题是网络服务不认识我(第二个请求是在20分钟内)。

运行webservice中的这部分代码:

if (Session["Username"] == null)
    return "Cant Update profile now, Your connection seems to be timeout";

我一直收到这条消息。但它有时候它的工作:/

感谢。

1 个答案:

答案 0 :(得分:0)

我在阅读你的问题后解决了我的问题,谢谢。 我的代码就像下面的代码:

HeaderProperty headerPropertySessionId = new HeaderProperty(“Cookie”,“key1 = value1”); List headerPropertyList = new ArrayList(); headerPropertyList.add(headerPropertySessionId);