2013-04-12 8 views
2

J'essaie d'implémenter la fonctionnalité de déconnexion pour mon application iPhone, qui utilise jQuery mobile, JS côté client et java côté serveur. Actuellement, ce que je dois faire est d'effacer cookie et de rediriger vers tag #loginpage dans mon index.html (Je n'ai que 1 fichier HTML dans lequel il existe plusieurs tags pour les différentes pages). Ce que je fais dès maintenant pour le clearCookie est:Comment supprimer un cookie

Cookie readCookie = null; 
for (Cookie cookie : httpRequest.getCookies()) { 
    if (cookie.getName().equals("CookieForLogin")) { 
     readCookie = cookie; 
     break; 
    } 
} 

readCookie.setMaxAge(0); 
httpResponse.addCookie(readCookie); 

Mais ce code n'efface le cookie. J'ai essayé les manières de JS, c.-à-d. Pour placer la date d'expiration à une date antérieure, donnée sur le filet mais elles n'ont pas fonctionné aussi. Aussi, je n'ai pas de méthode de réponse pour HttpServletResponse. Comment puis-je effacer le cookie qui est placé sur le côté client & comment également rediriger vers un tag particulier?

+0

Vous pouvez utiliser le juery.cookie? – JacobChan

+0

en utilisant $ .cookie ('CookieForLogin', null) ne fonctionnait pas. –

+1

N'oubliez pas de 'session.invalidate()' –

Répondre

3

Les cookies sont liés à un chemin spécifique. Vous devez vous assurer que vous avez défini le même chemin lors du retrait du cookie que pendant la création du cookie. Il est par défaut le dossier actuellement demandé dans l'URL (et ne serait donc disponible que dans le même dossier ou dans tous ses sous-dossiers). Vous feriez mieux de spécifier explicitement le chemin, sinon cela dépendrait du dossier actuellement demandé dans l'URL. L'information de chemin de cookie est comme le maxage à savoir non disponible dans l'en-tête de cookie de demande.

En supposant que vous avez créé le cookie comme suit,

Cookie cookie = new Cookie("CookieForLogin", cookieForLogin); 
cookie.setPath("/somePath"); 
cookie.setMaxAge(maxAgeInSeconds); 
// ... 
response.addCookie(cookie); 

il doit être supprimé comme suit:

Cookie cookie = new Cookie("CookieForLogin", null); 
cookie.setPath("/somePath"); 
cookie.setMaxAge(0); 
// ... 
response.addCookie(cookie); 

Le /somePath est juste exemplaire. Vous pouvez également utiliser /, à condition que ce soit la même chose dans les deux cas.

Remarque: il en va de même pour les indicateurs Secure et HTTP-only du cookie. Si vous l'avez initialement défini sur true lors de la création du cookie, vous devez également le définir sur true lors du retrait du cookie, par défaut false. Cela dit, je ne sais pas comment il est utile de stocker l'utilisateur connecté en tant que cookie. Vous autorisez également l'utilisateur final à manipuler sa valeur. Plutôt que de stocker l'utilisateur connecté en tant qu'attribut de session à la place et d'appeler session.invalidate() à la déconnexion.

+0

Ce que j'ai compris c'est juste de mettre le maximum à 0 ne fonctionne pas ..Nous devons définir les autres paramètres comme le contenu, le chemin, etc .. Merci @BalusC –

0

getMaxAge

getMaxAge public int() Obtient l'âge maximum en quelques secondes de ce cookie. Par défaut, -1 est renvoyé, ce qui indique que le cookie persistera jusqu'à l'arrêt du navigateur. Renvoie: un nombre entier spécifiant l'âge maximal du cookie en secondes; si elle est négative, signifie que le cookie persiste jusqu'à la fermeture du navigateur Voir aussi: setMaxAge (int)

// Java API Documentation

En bref, vous devez définir l'âge de cookie:

A negative value means that the cookie is not stored persistently and will be deleted when the Web browser exits. 
A zero value causes the cookie to be deleted. 

Cookie killMyCookie = new Cookie("mycookie", null); 
killMyCookie.setMaxAge(0); 
killMyCookie.setPath("/"); 
response.addCookie(killMyCookie); 
Questions connexes