2012-03-09 10 views
2

私のアプリケーションは、Webサービスに接続し、彼の機能のいくつかを有効にしているとします。 最初に、アプリケーションは引数としてユーザー名とパスワードを取得する「ログイン」関数をアクティブにします。関数はデータベースのユーザー名とパスワードを検索し、ログインしているかどうかを返します。データベース上で私のプロファイル値を変更UpdateProfile - 私は積極的に他のWebサービス機能が欲しいよりAndroid ksoap2セッションクッキーの管理

Session["Username"] = User.Username; 

Session["FullName"] = User.FullName; 

ともっと...

と:とのセッションを作成するように私のためにvarsは。

私のアプリケーションはいくつかのプライベートクラス(asynctasks)を持つクラスを持っています すべてのasynctaskは、Webサービス内の1つの関数を担当しています。例えば

- ログインasynctask:私はこのようなクッキーをバック来解析し、このログインasynctaskで

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

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

ともっと...

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では、このようなこのクッキーを送信しています:

 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でキャッチしようとすると、私が取得するクッキーが表示されます。 Set-Cookie:ASP.NET_SessionId = kmwn4l2qzc0k1anfk1du4ty1;パス= /; HttpOnlyの\ rを\ nは

と私は送る私のクッキーは、次のとおりです。 クッキー:ASP.NET_SessionId = kmwn4l2qzc0k1anfk1du4ty1 \ rを\ nは

問題は、Webサービスが私を認識していけないということである(第2の要求は20であります分の期間)。

このWebサービスの実行中のコードの一部:

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

と私は、このメッセージのすべての時間を取得します。しかし時々それが働いているそのくすみ:/

ありがとう。

答えて

0

質問を読んだ後に問題を解決しました。ありがとうございます。 私のコードは以下の通りです:

HeaderProperty headerPropertySessionId = new HeaderProperty( "Cookie"、 "key1 = value1"); List headerPropertyList = new ArrayList(); headerPropertyList.add(headerPropertySessionId);