7
votes

Bhsm-servlet ne laisse pas navigateur cache nom d'utilisateur

J'ai une exigence dans laquelle une valeur ne doit pas être mise en cache dans le serveur ni le navigateur en tant que cookie sur des domaines et des sessions.

J'ai donc choisi de rediriger permanente à la valeur

servlet: xxx

script: xxx

console-sortie: xxx

Après la charge réelle du BrowserCache ne renvoie pas le nom d'utilisateur que j'ai inséré.

Pourquoi le navigateur n'est-il pas en cache?

 Modifier: ajouté pour une explaitition


10 commentaires

Que dit la barre d'adresse avant et après la recharge?


http: // localhost: 8080 /


BHSM est le navigateurhistorystoramécanisme.


Au fait, si vous voulez que le navigateur cache le résultat, pourquoi appelez-vous réponse.addadheader ("pragma", "no-cache"); ?


@CUPAWNTAE J'aime l'empêcher toute proxy de la mise en cache. Pas le navigateur. Le pragma empêche-t-il aussi le navigateur de la mise en cache?


En fait, il est censé être utilisé uniquement comme un en-tête de requête selon la spécification, alors ce qu'il fait comme un en-tête de réponse est indéfini au mieux. Quoi qu'il en soit, il n'est pas limité aux mandataires, alors je serais tenté de le sortir, mais pas sûr que cela fait une différence ici. Le diagramme est utile BTW.


J'ai trouvé le pragma dans le dernier appel au servlet dans le diagramme. Le pragma est transformé en une en-tête de requête et empêche les proxy de la mise en cache si vous souhaitez modifier la valeur abc .


Il a également (officiellement au moins) indique au serveur que le client ne veut pas une copie mise en cache . Puisque vous contrôlerez manuellement le mécanisme de cache de serveur, cela ne devrait pas être un problème sur le côté serveur, mais si le client envoie cet en-tête, cela signifie peut-être qu'il l'a effacé dans le cache. Quoi qu'il en soit, je présume que vous avez essayé de le supprimer et que cela n'a pas résolu la question initiale, mais je serais tenté de le laisser sortir de l'équation jusqu'à ce que vous obteniez les choses qui y travaillent, juste pour l'exclure en tant que coupable.


Vous pouvez obtenir plus d'aide si vous avez changé le titre de la question. Je n'ai jamais rencontré l'initialisme BHSM avant et googling ne trouve rien non plus, afin que vous puissiez perdre des gens tout de suite parce qu'ils ne le reconnaissent pas. En outre, le problème réel n'est pas si clair en un coup d'œil. Quelque chose comme "le navigateur ne cache pas 301 réponses de redirection aux demandes d'Ajax" pourrait attirer quelqu'un qui connaît la réponse immédiatement.


Voulez-vous utiliser la touche au lieu de val dans l'appel à additionner? Si le navigateur n'a pas envoyé de If-modifié - depuis , il ne s'attend probablement pas à un 304. Généralement, un If-modifié - depuis n'est envoyé que si la dernière demande à celle-ci L'URL a renvoyé un en-tête de dernière modification.


3 Réponses :


0
votes

Votre demande est un appel AJAX qui est une demande async à votre servlet dans ce cas que votre redirection dans ServerSide n'affecte pas à Clientide. Cette demande fonctionne comme un fil séparé sur votre navigateur.

Vous devez donc spécifier des données de réponse (URL dans ce cas avec la chaîne de requête). Après la réponse du servlet dans votre rappel de réussite AJAX, vous devez spécifier l'emplacement à rediriger.

pour la redirection après Ajax Succès window.location.href = reponseurl; , au lieu de rediriger, vous pouvez définir la valeur de votre entrée.

Sinon, soumettez simplement le formulaire et rediriger via votre servlet.


0 commentaires

0
votes

Redirection de la demande Ajax ne redirigea pas le navigateur vers le nouvel emplacement, et si cela ne vous auriez plus votre page, vous n'avez plus que la réponse du servlet.

Alors quand vous Actualisez la page, vous demandez à nouveau l'URL d'origine de zéro à nouveau et le nom d'utilisateur est perdu. p>

Vous pouvez ajouter le nom d'utilisateur dans l'URL directement dans JavaScript: P>

jQuery('.username').val( window.location.hash );


1 commentaires

Je n'aime pas le navigateur pour changer l'emplacement.



0
votes

Même si vous obtenez le mécanisme de 301 travaillant, vous n'aurez aucune garantie sur la durée de laquelle le navigateur mettra en cache la redirection. Je n'ai pas de réponse immédiatement pour la raison pour laquelle les années 301 ne sont pas mises en cache pour vous, cependant, si vous allez bien avec le navigateur stockant le nom d'utilisateur quelque part (après tout, c'est ce que vous essayez de faire avec les 301s), et c'est juste que vous ne voulez pas spécifiquement que cela soit stocké dans un cookie , puis sessionStorage ou localStorage Soyez le bon choix: xxx

et xxx

ou utilisez localStorage pour le stocker de manière persistante à travers les sessions. < / p>

docs ici


2 commentaires

Ces stockages sont limités à un domaine ou à une session. Ceci est différent du mécanisme BHSM. J'aime laisser tout le monde partager ces informations sur différents domaines, extensions et plugins de différentes pages.


D'accord. Vaut probablement la peine d'ajouter cette exigence à la question.