Réutiliser HttpURLConnection pour garder la session en vie
Nous avons une application Android qui oblige l'utilisateur à entrer une réponse à un Captcha.
Le Captcha est généré sur notre serveur.
Quand les réponses, il est envoyé au serveur pour vérifier.
Problème est que depuis que j'ai fermer la HttpURLConnection après la demande pour le Captcha puis je trouver que la réponse est en cours d'exécution sur une autre session sur le serveur.
Pour cette raison, le Captcha vérification échoue, car il est la session de personne à charge.
Est-il un moyen de garder la connexion ou devrais-je suivre un chemin différent?
Je sais que dans l'équivalent d'une application iPhone ils rester "connecté" et ont donc le même id de session.
Edit:
CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);
URL urlObj = new URL(urlPath);
conn = (HttpURLConnection) urlObj.openConnection();
if (urlPath.toLowerCase().startsWith("https:")) {
initializeHttpsConnection((HttpsURLConnection) conn);
}
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Language", "en-US");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", Integer.toString(bodyData.length));
if (_sessionIdCookie != null) {
conn.setRequestProperty("Cookie", _sessionIdCookie);
}
//Connect
conn.setDoInput(true);
conn.setDoOutput(true);
conn.connect();
source d'informationauteur theblitz
Vous devez vous connecter pour publier un commentaire.
Normalement, les séances ne sont pas conservés basé sur la connexion http. Ça n'aurait pas de sens. Les Sessions sont normalement maintenus en vie par le biais d'un cookie sur le côté client et les informations de session sur le serveur.
Ce que tu dois faire est d'enregistrer le cookie(s) de réception, puis paramètre(ces) de cookie(s) la prochaine fois que vous vous connectez au serveur.
Pour en savoir plus sur la façon de travailler avec les sessions et les cookies avec le HttpUrlConnection classe, lire la documentation: http://developer.android.com/reference/java/net/HttpURLConnection.html
Voici un petit extrait pour vous aider à démarrer:
EDIT:
Pour ceux qui travaillent avec l'API de niveau 8 ou plus bas, vous aurez besoin d'utiliser Apache bibliothèque du!
Voici quelques code de référence:
Le code ci-dessus a été prise à partir de l'Apache bibliothèque des exemples. Il peut être trouvé ici:
http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/httpclient/src/examples/org/apache/http/examples/client/ClientCustomContext.java
EDIT 2:
Clairement:
Pour Apache bibliothèque, vous devez en quelque sorte "se connecter" la gestion des cookies de l'objet avec l'objet de connexion et vous le faire grâce à la HttpContext objet.
Dans HttpUrlConnection cas ce n'est pas nécessaire. lorsque vous utilisez CookieHandler de la méthode statique setDefaultde la configuration de l'ensemble du système cookieHandler. Ci-dessous est un extrait de l'CookieHandler.java. Remarque le nom de la variable (à partir de l'Android Open Source Project (PSBA) référentiel):
Pour maintenir la session à l'aide de
HttpURLConnection
vous avez besoin pour exécuter cette partiequ'une seule fois et non à chaque connexion. Bon candidat peut être sur le lancement d'une application à l'intérieur de
Application.onCreate();