Как управлять сессией PHP в Android с помощью HttpClient?

Я создаю 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, это не сработало, я установил файл PHPSESSID Cookie, используя setHeader для метода, также я попробовал метод из ответа здесь Как обработать сессию в HttpClient 4.1 но это не сработало, я мог войти в систему, и при печати файлов cookie в CookieSotre я вижу, что установлен 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, который я должен использовать?
пожалуйста помоги..

1

Решение

Я не так много знаю о компонентах HTTP, но есть хорошая веб-страница, которая может вам помочь: HttpComponents Wiki

Также, :

  1. Вместо того, чтобы просто начинать сеанс PHP, вы должны попробовать получить
session_id()
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]