Maison > Java > javaDidacticiel > Choses à propos des cookies et des sessions en Java

Choses à propos des cookies et des sessions en Java

高洛峰
Libérer: 2017-01-18 14:32:06
original
1257 Les gens l'ont consulté

Les cookies et les sessions sont tous deux utilisés pour maintenir le statut d'accès de l'utilisateur, d'une part, ils facilitent la mise en œuvre commerciale et, d'autre part, ils simplifient la conception des programmes côté serveur et améliorent les performances d'accès. Le cookie est une technologie côté client (c'est-à-dire côté navigateur). Après avoir défini un cookie, chaque fois que vous accédez au serveur, le cookie sera inclus dans la demande ; Session est une technologie côté serveur qui stocke les informations d'accès de l'utilisateur ; sur le serveur.

Les cookies sont utilisés pour transmettre des informations. À mesure que le nombre de cookies augmente et que le nombre de visites augmente, la bande passante occupée par eux deviendra de plus en plus grande. La plus grande faiblesse de l'utilisation de Session pour enregistrer des informations est. qu'il n'est pas facile de sauvegarder des informations sur plusieurs appareils partagés entre les serveurs.

1 Cookie

En termes simples, lorsqu'un utilisateur accède au serveur via HTTP, le serveur renvoie des informations sur la paire clé-valeur au navigateur client et les donne Certaines restrictions sont ajoutées aux données. Si les restrictions sont respectées, la prochaine fois que l'utilisateur accédera au serveur, les informations de paire clé-valeur de cookie définies précédemment seront apportées. Lorsque l'utilisateur saisit une URL, le navigateur recherche un cookie associé à l'URL sur son disque dur local. Si le cookie existe, le navigateur envoie le cookie à votre site avec la demande de page.

  Les cookies sont associés au site Web, et non à une page spécifique. Par conséquent, quelle que soit la page du site demandée par un utilisateur, le navigateur et le serveur échangeront des informations sur les cookies. Lorsqu'un utilisateur visite différents sites, chaque site peut envoyer un cookie au navigateur de l'utilisateur ; le navigateur stocke tous les cookies séparément.

Élément d'attribut du cookie

Il existe actuellement 2 versions de Cookie, la version 0 et la version 1. Elles ont 2 identifiants d'en-tête de réponse définis, à savoir "Set-Cookie" et "Définir-Cookie2".

Valeur d'attribut Cookie 0

Choses à propos des cookies et des sessions en Java

Valeur d'attribut Cookie 1

Choses à propos des cookies et des sessions en Java

Exemples d'utilisation de cookies en Java

@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
Cookie[] cookies = request.getCookies();
String name = getCoodie(cookies, "name");
if (name == null) {
response.addCookie(new Cookie("name", "luoxn28"));
}
else {
System.out.println(name);
}
out.println("hello world");
}
public static String getCoodie(Cookie[] cookies, String key) {
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals(key)) {
return cookie.getValue();
}
}
}
return null;
}
Copier après la connexion

Choses à propos des cookies et des sessions en Java

Quelques notes sur l'utilisation des cookies (en prenant Java comme exemple)

•Le nom et le nom de la personne créée la valeur du cookie ne peut pas être constituée de caractères non-ASSIC. Si elle est chinoise, elle peut être codée via RRLEncoder, sinon une exception java.lang.IllegalArgumentException sera levée.

•Lorsque plusieurs valeurs de nom et de valeur apparaissent, elles se trouvent en fait dans le même en-tête "Cookie".

•Les signes de ponctuation autres que ";" peuvent être enregistrés dans la valeur des Cookies. Mais les caractères chinois ne peuvent pas être sauvegardés. Des caractères tronqués apparaîtront lors de l’enregistrement des caractères chinois.

Quelques limitations du Cookie

Le Cookie est un champ dans l'en-tête HTTP HTTP lui-même n'a aucune restriction sur ce champ, mais le Cookie est finalement stocké dans le navigateur. Différents navigateurs ont certaines limitations sur le stockage des cookies, comme indiqué dans le tableau suivant :

Choses à propos des cookies et des sessions en Java

Choses à propos des cookies et des sessions en Java

Si vous essayez de stocker plus de cookies, le le plus ancien Le cookie sera supprimé.

2 Session

La session résout le problème selon lequel lorsque le nombre de cookies augmente, la quantité de transmission de données entre le client et le serveur augmente lorsque le même client. interagit avec le serveur, il n'est pas nécessaire que toutes les valeurs des cookies soient renvoyées à chaque fois, mais une seule valeur d'ID est renvoyée. Cet ID est généré lorsque le client accède au serveur pour la première fois et est unique pour chaque client. Cet identifiant est généralement celui nommé JSESSIONID Cookies.

Comment fonctionne la session basée sur un cookie ? Elle peut être basée sur le paramètre de chemin d'URL ; elle peut également être basée sur un cookie. Si le logo Cookies dans le conteneur Contexte n'est pas modifié, il est pris en charge par. défaut. Lorsque le navigateur ne prend pas en charge la fonction Cookie, le navigateur réécrira le SessionCookieName de l'utilisateur dans les paramètres d'URL demandés par l'utilisateur, et sa méthode de livraison est telle que /path/Servlet;name=xxx;name2=xxx2?name3=xxx3. SessionCookieName Si l'élément de configuration session-config est configuré dans web.xml, l'attribut name sous cookie-config est la valeur de ce SessionCookieName. Si l'élément de configuration session-config n'est pas configuré, le SessionCookieName par défaut est « JSESSIONID ». Notez que le cookie associé à la Session n'est pas différent des autres cookies. Si le client prend également en charge les cookies, Tomcat analysera toujours l'ID de session dans le cookie et écrasera l'ID de session dans l'URL.

Comment fonctionne la session

  有了Session ID,服务器就可以创建HttpSession对象了,第一次调用request.getSession()方法,如果没有对应的HttpSession对象,则会创建一个新的,并将这个对象加入到org.apache.catalina.Manager的sessions容器中保存。Manage保存所有的session生命周期,Session过期被回收,服务器关闭,Session被序列化到磁盘。注意,一个客户端对应一个Session对象,这个对象正是保存我们创建的Session值的。

Choses à propos des cookies et des sessions en Java

  request.getSession()方法调用的StandardSession永远都会存在,即使与这个客户端关联的Session已经过期。如果过期,则会创建一个新的,但是以前设置的Session值将会丢失。

3 Cookie与Session安全性比较

  Cookie将保存的数据通过HTTP头部从客户端传到服务端,从服务端再传回到客户端,所有的数据都保存在客户端浏览器中,这些数据都是可以访问到的,甚至可以通过插件添加、修改Cookie,所有Cookie的安全性是比较差的。相比较而言,Session将数据保存在服务器端,安全性高很多,只需要Cookie传回一个Cookie ID就可以,所以Session更适合保存用户隐私和重要的数据。

分布式Session框架

  在大型互联网应用中,单用Cookie和Session都是不可行的,因为如果使用Cookie可以很好地解决应用的分布式部署问题,大型互联网应用系统一个应用有上百台机器,而且有很多不同的应用系统协同工作,由于Cookie是将数据存储在用户浏览器中,用户每次访问都会讲数据带回到服务器,也就解决了同一个用户的请求在不同服务器上处理而导致的Cookie不一致问题。

Choses à propos des cookies et des sessions en Java

  由于应用是一个集群,所以不能将Session都保存在每台服务器的内存中,如果每台服务器有几十万访问用户,服务器内存也容不下,即使容得下,也无法保证该Session同步到其他服务器中,所以共享这些Session需要将它们保存在专门的分布式缓存中,可以随时读取和写入,性能要够好满足要求,如memcache/redis或者淘宝的开源分布式框架Tair都是很好的选择。

表单重复提交问题

  网站中有很多地方有重复提交表单问题,为了防止表单重复提交,就要标识用户的每一次访问请求,使得每一次访问请求对服务端来说都是唯一的,为了标识用户的每次请求,可以在用户请求的表单域增加一个隐藏表单项,其值为唯一的token,如:

<form id="form" method="post">
...
<input type=hidden name="token" value="xxx"/>
</form>
Copier après la connexion

  用户请求表单时生成唯一的token,并且设置到该用户的Session中,等用户提交时检测这个token是否和Session中保存的token一致,如果一致,说明没有重复提交,同时把Session中的token更新成一个新的token值;否则用户提交上来的token已经不是当前请求的合法token,提交失败。

Choses à propos des cookies et des sessions en Java

以上所述是小编给大家介绍的Choses à propos des cookies et des sessions en Java,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对PHP中文网的支持!

更多Choses à propos des cookies et des sessions en Java相关文章请关注PHP中文网!


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal