gpt4 book ai didi

java - 如何使用 HttpClient 在 Android 中管理 PHP session ?

转载 作者:行者123 更新时间:2023-11-30 01:44:02 25 4
gpt4 key购买 nike

我正在构建一个需要客户端登录才能返回一些信息的 php 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 作为方法,我也尝试了这里答案中的方法 How to Handle the Session in 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 之外,还有其他 header 吗?请帮助..

最佳答案

我对 HTTP 组件知之甚少,但有一个不错的网页可能会对您有所帮助:HttpComponents Wiki

还有:

  1. 不是简单地启动 PHP session ,您应该尝试获取

session_id()

在第一个 fragment 中。

  1. 检查Java缓存是否激活。尝试 Tag Property

  2. URLConnection读取 cookie

  3. this thread关于“如何在 php 应用程序和 Java EE 应用程序之间共享 session ?”

祝你好运!!!

关于java - 如何使用 HttpClient 在 Android 中管理 PHP session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33987735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com