Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android aspx web服务中无Cookie会话的解决方案_Android_Asp.net_Asmx_Ksoap2_Android Ksoap2 - Fatal编程技术网

Android aspx web服务中无Cookie会话的解决方案

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会话就可以在那里工作,但我不知道如何调用页面方法 由于我不

我有一个我不知道如何解决的问题,几天前我发布了一个关于在ksoap中使用会话web服务的问题。问题是ksoap没有cookie选项,因此可以存储sessionID。但是我考虑了一个可能的解决方案,它将使用无cookieless会话(在url中发送sessionID)。问题是web服务中的会话不能在“无Cookie模式”下工作,只能使用我不能使用的Cookie

另一个想法是在aspx页面中实现相同的web服务方法,这样无cookieless会话就可以在那里工作,但我不知道如何调用页面方法

由于我不知道如何调用page方法,我认为应该从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(); 
因此,我需要一种方法来实施我的解决方案:

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或
中摆弄