在android中维护会话(应用程序在服务器端保持身份验证)

Din*_*rma 32 session android session-state http-headers

我正在android中建立一个登录应用程序,我正在点击一个url(用户名和密码),直到那部分它工作正常,但在那之后每当我点击一个url(一旦用户被认证),它什么都不返回(即错误消息,请先登录).但它在非常相似的iPhone应用程序和浏览器上工作正常.

我得到的地方是phpSessionId的错误(即会话被销毁以获得进一步的请求)如果我们希望我们的Android应用程序在服务器端保持身份验证,我们需要在第一次连接后获取该ID,然后将其发送到我们所有后续请求的标题.

但问题是,我无法从第一个连接的标头获取sessionId,并发送带有标头的进一步请求.

请给我一些代码或链接来正确完成任务.谢谢.

Din*_*rma 48

最后,我解决了Android中会话处理问题.Android无法处理会话本身(简单的浏览器可以),因此我们必须明确处理它.我稍微更改了http连接的代码.建立连接时,在第一个Activity中创建DefaultHttpClient的实例 .

public static DefaultHttpClient httpClient;
Run Code Online (Sandbox Code Playgroud)

第一次连接时,我做了以下事情:

URL url=new URL(urlToHit);
LoginScreen.httpClient = new DefaultHttpClient(); //LoginScreen is the name of the current Activity

HttpPost httppost = new HttpPost(url.toString());
HttpResponse response = LoginScreen.httpClient.execute(httppost); 

xr.parse(new InputSource(url.openStream())); //SAX parsing
Run Code Online (Sandbox Code Playgroud)

现在对于所有进一步的连接我使用相同的httpClient 例如在下一个活动中:

URL url=new URL(urlToHit);

HttpPost httppost = new HttpPost(url.toString());
HttpResponse response = LoginScreen.httpClient.execute(httppost); 

// Log.v("response code",""+response.getStatusLine().getStatusCode());

// Get hold of the response entity
HttpEntity entity = response.getEntity();

InputStream instream = null;

if (entity != null) {
    instream = entity.getContent();
}
xr.parse(new InputSource(instream)); //SAX parsing
Run Code Online (Sandbox Code Playgroud)

希望这也将帮助您解决Android中的会话问题.