Android aspx web服务中无Cookie会话的解决方案
我有一个我不知道如何解决的问题,几天前我发布了一个关于在ksoap中使用会话web服务的问题。问题是ksoap没有cookie选项,因此可以存储sessionID。但是我考虑了一个可能的解决方案,它将使用无cookieless会话(在url中发送sessionID)。问题是web服务中的会话不能在“无Cookie模式”下工作,只能使用我不能使用的Cookie 另一个想法是在aspx页面中实现相同的web服务方法,这样无cookieless会话就可以在那里工作,但我不知道如何调用页面方法 由于我不知道如何调用page方法,我认为应该从web服务调用它,然后重新发送返回的数据Android aspx web服务中无Cookie会话的解决方案,android,asp.net,asmx,ksoap2,android-ksoap2,Android,Asp.net,Asmx,Ksoap2,Android Ksoap2,我有一个我不知道如何解决的问题,几天前我发布了一个关于在ksoap中使用会话web服务的问题。问题是ksoap没有cookie选项,因此可以存储sessionID。但是我考虑了一个可能的解决方案,它将使用无cookieless会话(在url中发送sessionID)。问题是web服务中的会话不能在“无Cookie模式”下工作,只能使用我不能使用的Cookie 另一个想法是在aspx页面中实现相同的web服务方法,这样无cookieless会话就可以在那里工作,但我不知道如何调用页面方法 由于我不
String NAMESPACE = "http://tempuri.org/";
String METHOD_NAME = "Test";
String SOAP_ACTION = "http://tempuri.org/Test";
String URL = "http://mysite.com/WebService.asmx";
SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo pi = new PropertyInfo();
pi.setName("s");
pi.setValue("dddddddd");
pi.setType(String.class);
Request.addProperty(pi);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(Request);
envelope.addMapping(NAMESPACE, "Category",new Category().getClass());
AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapObject response = (SoapObject)envelope.getResponse();
因此,我需要一种方法来实施我的解决方案:
1) 在asmx web服务中实现无Cookie会话的一种方法
2) 一种使用ksoap调用页面web方法的方法,以便无cookiless会话在那里工作
3) 也许是从web服务方法调用aspx页面方法的一种方法,这样我就可以像使用“桥”一样使用web服务方法,它将重新发送页面方法返回的数据
String NAMESPACE = "http://tempuri.org/";
String METHOD_NAME = "Test";
String SOAP_ACTION = "http://tempuri.org/Test";
String URL = "http://mysite.com/WebService.asmx";
SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo pi = new PropertyInfo();
pi.setName("s");
pi.setValue("dddddddd");
pi.setType(String.class);
Request.addProperty(pi);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(Request);
envelope.addMapping(NAMESPACE, "Category",new Category().getClass());
AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapObject response = (SoapObject)envelope.getResponse();
我的web服务方法返回一个类别对象列表(已测试并运行,但如果使用会话,则不会)
有人有提议吗 我能做到
基本上,我会调用登录web服务并保存响应中的Set Cookie
头值。然后在对其他web方法的后续调用中返回值
将有两个“Set Cookie”头键,看起来像这样:
设置Cookie:ASP.NET_SessionId=zpe44yb05a105zuz2f24aqi5;路径=/;
HttpOnly
设置Cookie:.ASPXAUTH=4bec23d4fa4b34c7145550f2fe279e047ed2e16f15038966c949ac3a08daac932f6869d9b667a6735d6ea6419074f0f1c34bc3f0824c6c2e70975f804e2447f60966406dc1f15d267b041ff4c752e904ad86bb61300df2003cf77492d680acc9c76f61f4f6f6f6f6f6f6f6f6f6f704c6d6d6c6c6d6c6c6c6c6c6c6c6d6d6d6d6d6f16;
路径=/;HttpOnly
保存它们并调用后续的“安全”webmethods,其中两个值都包含一个代码>在它们之间
在后续调用中包含的标题应如下所示:
Cookie:ASP.NET_SessionId=zpe44yb05a105zuz2f24aqi5;路径=/;HttpOnly;
.ASPXAUTH=4BEC23D4FA4B34C7145550F2FE279E047ED2E16F1503896C949AC3A08DAAC932F6869D9B667A6735D6EA6419074F0F1C34BC3F08210904B2BB9E543CF4CCE6C2E70975F804E2447F60966406ADC1F015D267B0413FF4C79A252E904AD86BB315ED161300DF2003CFA77492DB680F9C76F61F70D4E6466;
路径=/;HttpOnly
我也面临同样的困境。你找到解决办法了吗?我能做到!我会发布一个答案。嘿,谢谢你的回答。我的问题是:,会话cookie丢失,只有在调用.aspx页面时,响应头才具有sessionID属性。但是我也不知道如何调用web方法,所以我陷入了这个问题。您使用的ksoap版本是什么?因为我的(2.4)无法识别HeaderProperty。你能给我更多关于你如何与你的web服务进行通信的详细代码吗?感谢u@markouuu我的ksoap2版本是2.6.5。然而我想如果你的设置Cookie
没有返回到标题中,它可能是服务器端的东西。您的Web服务方法上是否有[System.Web.Services.WebMethod(EnableSession=true)]
?您还可以尝试在web.config或
中摆弄
。