1

ログイン webmethod を呼び出すときに http ヘッダー Cookie/sessionid 情報を保存しているので、フォーム認証によって保護された後続の webmethod 呼び出しでそれを送り返すことができます。そのように保存して送り返すには、適切なヘッダー値を知る必要があるだけだと思います。

ksoap2 を使用して Android アプリからこれらのサービスを呼び出しています。

ログインを呼び出すときにコードをステップスルーするとき。2 つの Set-Cookieヘッダー項目が表示されます。

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

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

こちらのドキュメントとこちらの回答からわかるように、Set-Cookieを使用して後続の webmethods に値を返す必要がありますCookie。しかし、上記でわかるように、2 つの Set-Cookieヘッダー項目を取得しています。それで、どれを送り返しますか、そのまま送り返すことができますか、.ASPXAUTH=それともその部分などを取り除く必要がありますか?

4

1 に答える 1

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); 
于 2012-12-17T00:52:43.983 に答える