[英]How do I manage cookies with HttpClient in Android and/or Java?
[英]how to manage PHP session in android using HttpClient?
我正在构建一个PHP API,该API需要登录客户端以返回一些信息。此页面的代码如下:
include('connect.php');
session_start();
if(isset($_SESSION['username'])) {
# select data from the database and echo it back.
}
else {
session_unset();
session_destroy();
echo -1;
}
?>
但在此之前,客户应使用其他页面登录`
if (isset($_GET['usr']) && isset($_GET['password'])){
$usr = $_GET['usr'];
$passwd = $_GET['password'];
$login = 0;
$stmt = $conn->prepare("select * from users where userName=? and passwd =?");
$stmt->execute(array($usr,$passwd));
while($row = $stmt->fetch()) {
$login = 1;
session_start();
$id = session_id();
$_SESSION['username'] = $usr;
break;
}
if($login == 1) {
echo "signed on";
}
if($login == 0) {
echo "username or password incorrect";
}
}
else {
echo "parameter not set";
}
?>
当我从浏览器尝试此功能时,效果很好。 但是,当我从android应用程序尝试此操作似乎无效时,我使用setHeader设置了PHPSESSID Cookie,也尝试了此处答案的方法: 如何在HttpClient 4.1中处理会话,但没有成功工作,我可以登录,并且在CookieSotre中打印cookie时,我可以看到已设置PHPSESSID,但是服务器也无法将我视为已登录。。这是我的代码
ClientUtils.java
public class ClientUtils {
public static final DefaultHttpClient myHttpClient = new DefaultHttpClient();
public static final HttpContext httpContext = new BasicHttpContext();
public static final CookieStore cookieStore = new BasicCookieStore();
public static void config() {
httpContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
}
public static void printCookies() {
for(Cookie k :cookieStore.getCookies())
Log.d(k.getName(), k.getValue());
}
}
LoginTask.java
public class LoginTask extends AsyncTask<String, Integer, String> {
protected String doInBackground(String... url) {
try {
ClientUtils.config();
String urlll = "http://192.168.200.15/login.php?usr=monim&password=monim";
HttpGet httpget = new HttpGet(urlll);
HttpResponse response = ClientUtils.myHttpClient.execute(httpget, ClientUtils.httpContext);
ClientUtils.printCookies(); //this print the value of PHPSESSID
}catch(Exception e) {}
return null;
}
protected void onPostExecute(String... url) {
// do something
}
}
在第二页中,我使用此代码段
HttpGet getRequest = new HttpGet(url);
getRequest.addHeader("accept", "application/json");
HttpResponse response = ClientUtils.myHttpClient.execute(getRequest, ClientUtils.httpContext);
但这不起作用,我总是得到错误的答案,我错过了什么吗? 除了我应该使用的sessionId以外,还有其他标题吗? 请帮忙..
我对HTTP组件了解不多,但是有一个不错的网页可以为您提供帮助: HttpComponents Wiki
另外,:
session_id()
在第一段中。
检查Java的缓存是否已激活。 尝试标记属性
URLConnection读取cookie
而这个线程的“如何PHP应用程序和Java EE应用程序之间共享会话?”
祝好运!!!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.