0

嗨,我开发了一个名为soap webservices的登录表单。它对我来说完全成功了……但是现在我实现了这一部分。在这里我将进行会话管理……如何在dis登录表单中进行会话管理。请指导我.

dis 是我的 android 编码部分:

  package com.soap;
  import org.ksoap2.SoapEnvelope;
  import org.ksoap2.serialization.PropertyInfo;
  import org.ksoap2.serialization.SoapObject;
  import org.ksoap2.serialization.SoapPrimitive;
  import org.ksoap2.serialization.SoapSerializationEnvelope;
  import org.ksoap2.transport.HttpTransportSE;


   import android.app.Activity;
   import android.content.Intent;
   import android.os.Bundle;
   import android.view.View;
   import android.widget.Button;
   import android.widget.CheckBox;
   import android.widget.EditText;
   import android.widget.TextView;
   import android.content.SharedPreferences;
   import android.content.Context;
   public class Login extends Activity {
   private static final String SPF_NAME = "vidslogin";
   private static final String USERNAME = "username";
   private static final String PASSWORD = "password";

   EditText userName,userPassword;
   private final String NAMESPACE = "http://ws.userlogin.com";
   private final String URL = "http://192.168.1.168:8085/LoginSoap/services/Login?wsdl";
   private final String SOAP_ACTION = "http://ws.userlogin.com/authentication";
   private final String METHOD_NAME = "authentication";
   /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.login);

 Button logout = (Button) findViewById(R.id.btn_logout);
  logout.setOnClickListener(new View.OnClickListener() {

 public void onClick(View v) {
 // Switching to Register screen
  Intent i = new Intent(getApplicationContext(), Login.class);
  startActivity(i);
  }
  });

 Button login = (Button) findViewById(R.id.btn_login);
 login.setOnClickListener(new View.OnClickListener() {

 public void onClick(View arg0) {
  loginAction();

     }
     });
    }

   private void loginAction(){
 SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

    EditText userName = (EditText) findViewById(R.id.tf_userName);
    String user_Name = userName.getText().toString();
    EditText userPassword = (EditText) findViewById(R.id.tf_password);
    String user_Password = userPassword.getText().toString();

  //Pass value for userName variable of the web service
    PropertyInfo unameProp =new PropertyInfo();
    unameProp.setName("userName");//Define the variable name in the web service method
    unameProp.setValue(user_Name);//set value for userName variable
    unameProp.setType(String.class);//Define the type of the variable
    request.addProperty(unameProp);//Pass properties to the variable

  //Pass value for Password variable of the web service
    PropertyInfo passwordProp =new PropertyInfo();
    passwordProp.setName("password");
    passwordProp.setValue(user_Password);
    passwordProp.setType(String.class);
    request.addProperty(passwordProp);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.setOutputSoapObject(request);
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

    try{
        androidHttpTransport.call(SOAP_ACTION, envelope);
           SoapPrimitive response = (SoapPrimitive)envelope.getResponse();

           TextView result = (TextView) findViewById(R.id.tv_status);
           result.setText(response.toString());

    }
    catch(Exception e){

    }
   }

    }

指导我如何在 android 应用程序中进行会话。请给我一些想法。

4

1 回答 1

1

有多种实现方式Session Management。我建议你应该尝试使用Cookies

ksoap版本(我猜是 ksoap 2.5.4)内置了 cookie 支持,使您能够将 cookie 传入和传出应用程序。

细节

该类HttpTransportSE公开了方法调用,除了所需的 SOAP 参数之外,它还接受HeaderProperty实例列表。它还返回一个like List。这提供了向请求附加附加标头并查看返回的标头的能力。由于 cookie 只是这些标头之一,因此可以使用此工具来发送和接收 cookie。

Cookie 简单地从 Web 服务接收并作为 HTTP 前导中的标头发送到 Web 服务。为了在 ksoap2-android 中使用 cookie,需要保存所有返回的 cookie,并在随后调用 Web 服务时返回它们。

例子

  List respHeaders = android_http.call(SOAP_ACTION, envelope2, reqHeaders); 
  for(int ix=0; ix<respHeaders.size(); ix++) { 
  HeaderProperty hp = (HeaderProperty)respHeaders.get(ix); 
  System.out.println("Header"+ix+"="+hp.getKey()+" / "+hp.getValue()); 

因此,对于会话管理,您只需保存 Cookie 并在请求中设置它们。

这是一个显示如何保存cookie并将cookie返回到Web服务的问题

信息来源:ksoap2-android和cookies

于 2012-07-19T11:53:52.507 回答