我在调用登录webmethod时保存了http header cookie / sessionid信息,因此我可以在由formsauthentication保护的后续webmethod调用中将其发回。我想我只需知道要保存的正确标头值并将其发回。
我正在使用ksoap2从Android应用程序调用这些服务。
当我在调用login时单步执行代码。我看到两个 Set-Cookie
标题项:
Set-Cookie
ASP.NET_SessionId=wblzzrtfmli4blku2dslw5iw; path=/; HttpOnly
Set-Cookie
.ASPXAUTH=8264E023428DA853BB163504C0D375D792FC631BB873F04D196E04BAEDE7F7BB39BB5C840D0CD0613A0DD58B2456F12EE21F212D93457F3D6BC2FC343C6AE1E3DD97473B055B36379D178FE6C412EFF61CFCE7FACAF43EEAE85C46B5123CB97C3AFF156F54921993F4A2B85BEE239EAFB05AFFF58FBDA3B7EBDC59B5E0A614D8CC086B5C7DF3A884DE95DBE05F6A138DB97241666870AAF9320EDD; path=/; HttpOnly
据我了解documentation here和answer here,我必须使用Set-Cookie
将Cookie
值返回给后续的网络方法。但正如您在上面所看到的,我正在获得两个Set-Cookie 标题项。那么我要寄回哪一个,我可以按原样发送它们还是我需要删除.ASPXAUTH=
部分或其他任何内容?
答案 0 :(得分:0)
当我在Web应用程序中从JQuery Ajax调用安全服务时,我通过嗅探Set-Cookie标头的样子来获得答案。
基本上我使用分号“;”连接了两个BOTH 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);