私のアプリケーションは、Webサービスに接続し、彼の機能のいくつかを有効にしているとします。 最初に、アプリケーションは引数としてユーザー名とパスワードを取得する「ログイン」関数をアクティブにします。関数はデータベースのユーザー名とパスワードを検索し、ログインしているかどうかを返します。データベース上で私のプロファイル値を変更UpdateProfile - 私は積極的に他のWebサービス機能が欲しいよりAndroid ksoap2セッションクッキーの管理
Session["Username"] = User.Username;
Session["FullName"] = User.FullName;
ともっと...
と:とのセッションを作成するように私のためにvarsは。
私のアプリケーションはいくつかのプライベートクラス(asynctasks)を持つクラスを持っています すべてのasynctaskは、Webサービス内の1つの関数を担当しています。例えば
- ログインasynctask:私はこのようなクッキーをバック来解析し、このログインasynctaskで
private class LoginAsyncTask extends AsyncTask<String, String, User>
{
private String METHODNAME = "Login";
private String SOAPACTION = "http://tempuri.org/Login";
ともっと...
:
cookies is a HashMap<String, String>();
try
{
//respHeaders = trans.call(SOAPACTION, envelope, null);
reshttpHeaders = trans.call(SOAPACTION, envelope, null);
}
catch (Exception e)
{
//connection error.
e.printStackTrace();
return null;
}
cookies.clear();
if (reshttpHeaders!=null) {
for (int i = 0; i < reshttpHeaders.size(); i++) {
HeaderProperty hp = (HeaderProperty)reshttpHeaders.get(i);
String key = hp.getKey();
String value = hp.getValue();
if (key!=null && value!=null) {
if (key.equalsIgnoreCase("set-cookie")){
String cookieString = value.substring(0,value.indexOf(";"));
cookies.put(cookieString.substring(0, cookieString.indexOf("=")),cookieString.substring(cookieString.indexOf("=")+1));
break;
}
}
}
}
と比べて、 UpdateProfileAsynctask という別のasynctaskでは、このようなこのクッキーを送信しています:
List<HeaderProperty> httpHeaders = new ArrayList<HeaderProperty>();
for (String cookie:cookies.keySet()) {
httpHeaders.add(new HeaderProperty("Cookie", cookie + "=" + cookies.get(cookie)));
}
try
{
//trans.call(SOAPACTION, envelope, reqHeaders);
trans.call(SOAPACTION, envelope, httpHeaders);
}
このパケットをwiresharkでキャッチしようとすると、私が取得するクッキーが表示されます。 Set-Cookie:ASP.NET_SessionId = kmwn4l2qzc0k1anfk1du4ty1;パス= /; HttpOnlyの\ rを\ nは
と私は送る私のクッキーは、次のとおりです。 クッキー:ASP.NET_SessionId = kmwn4l2qzc0k1anfk1du4ty1 \ rを\ nは
問題は、Webサービスが私を認識していけないということである(第2の要求は20であります分の期間)。
このWebサービスの実行中のコードの一部:
if (Session["Username"] == null)
return "Cant Update profile now, Your connection seems to be timeout";
と私は、このメッセージのすべての時間を取得します。しかし時々それが働いているそのくすみ:/
ありがとう。