2012-12-16 65 views
1

我在調用登錄webmethod時保存http頭cookie/sessionid信息,因此我可以在隨後通過formsauthentication保證的webmethod調用上發送它。我想我只需要知道正確的標題值就可以保存併發送回去。在頭文件中,asmx期望的sessionid/cookie信息是什麼?

我從使用kso​​ap2的android應用程序調用這些服務。

當我在登錄時調用代碼時。我看到 Set-Cookie頭項目:

Set-Cookie 
ASP.NET_SessionId=wblzzrtfmli4blku2dslw5iw; path=/; HttpOnly 

Set-Cookie 
.ASPXAUTH=8264E023428DA853BB163504C0D375D792FC631BB873F04D196E04BAEDE7F7BB39BB5C840D0CD0613A0DD58B2456F12EE21F212D93457F3D6BC2FC343C6AE1E3DD97473B055B36379D178FE6C412EFF61CFCE7FACAF43EEAE85C46B5123CB97C3AFF156F54921993F4A2B85BEE239EAFB05AFFF58FBDA3B7EBDC59B5E0A614D8CC086B5C7DF3A884DE95DBE05F6A138DB97241666870AAF9320EDD; path=/; HttpOnly 

當我從documentation hereanswer here明白,我必須將Set-Cookie值返回到使用Cookie隨後webMethods的。但正如你所看到的,我得到了兩個Set-Cookie標題項目。那麼我可以發回哪一個,並且可以將它們按原樣發回,還是需要去除.ASPXAUTH=部分或其他任何內容?

回答

0

當我從Web應用程序中的JQuery Ajax調用安全服務時,我能夠通過嗅探Set-Cookie頭的外觀來獲得答案。

基本上我使用分號「;」連接了兩個Set-Cookie值。

在登錄我保存它是這樣的:

StringBuilder cookieBuilder = new StringBuilder(); 

int intCookieValueCount = 0; 
for (Object header : headerList) { 
    HeaderProperty headerProperty = (HeaderProperty) header; 
    String headerKey = headerProperty.getKey(); 
    String headerValue = headerProperty.getValue(); 

    if(headerKey != null){ 
     if(headerKey.equals("Set-Cookie")) 
     { 
      if(intCookieValueCount!=0){ 
       cookieBuilder.append("; "); 
      }     
      cookieBuilder.append(headerValue); 
      intCookieValueCount++; 
     }     
    } 
} 

AppSettings.setSessionCookie(cookieBuilder.toString()); 

並在後續調用:

HeaderProperty headerPropertyObj = new HeaderProperty("Cookie", AppSettings.getSessionCookie()); 
@SuppressWarnings("rawtypes") 
List headerList = new ArrayList(); 

headerList.add(headerPropertyObj); 

androidHttpTransport.call(SOAP_ACTION, envelope, headerList); 
相關問題