Cookies und Sitzungen werden beide verwendet, um den Zugriffsstatus des Benutzers aufrechtzuerhalten. Einerseits erleichtern sie die Geschäftsimplementierung, andererseits vereinfachen sie das serverseitige Programmdesign und verbessern die Zugriffsleistung. Cookie ist eine clientseitige (d. h. browserseitige) Technologie. Nach dem Setzen eines Cookies wird das Cookie bei jedem Zugriff auf den Server in die Anfrage aufgenommen. Die Sitzung ist eine serverseitige Technologie und die Zugriffsinformationen des Benutzers wird auf dem Server gespeichert.
Cookies werden zur Übermittlung von Informationen verwendet. Mit zunehmender Anzahl von Cookies und zunehmender Anzahl von Besuchen wird die von ihnen belegte Bandbreite immer größer dass es nicht einfach ist, Informationen auf mehreren Geräten zu speichern, die von Servern gemeinsam genutzt werden.
1 Cookie
Laienhaft ausgedrückt: Wenn ein Benutzer über HTTP auf den Server zugreift, gibt der Server einige Schlüssel-Wert-Paar-Informationen an den Client-Browser zurück und gibt diese weiter Den Daten werden einige Einschränkungen hinzugefügt. Wenn die Einschränkungen erfüllt sind, werden beim nächsten Zugriff des Benutzers auf den Server die zuvor festgelegten Cookie-Schlüssel-Wert-Paar-Informationen mitgebracht. Wenn der Benutzer eine URL eingibt, sucht der Browser auf seiner lokalen Festplatte nach einem mit der URL verknüpften Cookie. Wenn das Cookie vorhanden ist, sendet der Browser das Cookie mit der Seitenanforderung an Ihre Website.
Cookies sind mit der Website verknüpft, nicht mit einer bestimmten Seite. Unabhängig davon, welche Seite der Website ein Benutzer anfordert, tauschen Browser und Server daher Cookie-Informationen aus. Wenn ein Benutzer verschiedene Websites besucht, kann jede Website ein Cookie an den Browser des Benutzers senden; der Browser speichert alle Cookies separat.
Cookie-Attributelement
Derzeit gibt es zwei Versionen von Cookie, Version 0 und Version 1. Sie verfügen über zwei festgelegte Antwortheader-IDs, nämlich „Set-Cookie“ und „Cookie2 setzen“.
Attributwert von Cookie 0
Attributwert von Cookie 1
Beispiele für die Verwendung von Cookies in 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; }
Einige Hinweise zur Verwendung von Cookies (am Beispiel von Java)
•Der Name und der Name der erstellten Cookies Der Cookie-Wert darf nicht aus Nicht-ASSIC-Zeichen bestehen. Wenn es sich um chinesische Zeichen handelt, kann er über RRLEncoder codiert werden, andernfalls wird eine java.lang.IllegalArgumentException-Ausnahme ausgelöst.
•Wenn mehrere Namens- und Wertwerte auftauchen, befinden sie sich tatsächlich im selben „Cookie“-Header.
•Andere Satzzeichen als „;“ können im Wert von Cookies gespeichert werden. Chinesische Schriftzeichen können jedoch nicht gespeichert werden. Beim Speichern chinesischer Zeichen werden verstümmelte Zeichen angezeigt.
Einige Einschränkungen von Cookies
Cookie ist ein Feld im HTTP-Header. HTTP selbst hat keine Einschränkungen für dieses Feld, aber das Cookie wird letztendlich im Browser gespeichert. Verschiedene Browser haben einige Einschränkungen bei der Speicherung von Cookies, wie in der folgenden Tabelle gezeigt:
Wenn Sie versuchen, mehr Cookies zu speichern, wird die ältester Das Cookie wird verworfen.
2 Sitzung
Sitzung löst das Problem, dass bei zunehmender Anzahl von Cookies das Datenübertragungsvolumen zwischen dem Client und dem Server zunimmt, wenn derselbe Client interagiert Beim Server müssen nicht jedes Mal alle Cookie-Werte zurückgegeben werden, es wird jedoch nur ein ID-Wert zurückgegeben. Diese ID wird generiert, wenn der Client zum ersten Mal auf den Server zugreift, und ist für jeden Client eindeutig Die ID heißt normalerweise JSESSIONID.
Wie funktioniert eine Sitzung basierend auf einem Cookie? Sie kann auch auf einem Cookie basieren. Wenn das Cookies-Logo im Kontextcontainer nicht geändert wird, wird es unterstützt Standard. Wenn der Browser die Cookie-Funktion nicht unterstützt, schreibt der Browser den SessionCookieName des Benutzers in die vom Benutzer angeforderten URL-Parameter um und seine Übermittlungsmethode lautet wie folgt: /path/Servlet;name=xxx;name2=xxx2?name3=xxx3. SessionCookieName Wenn das Konfigurationselement session-config in web.xml konfiguriert ist, ist das Namensattribut unter cookie-config der Wert dieses SessionCookieName. Wenn das Konfigurationselement „session-config“ nicht konfiguriert ist, lautet der Standard-SessionCookieName „JSESSIONID“. Beachten Sie, dass sich das mit der Sitzung verknüpfte Cookie nicht von anderen Cookies unterscheidet. Wenn der Client auch Cookies unterstützt, analysiert Tomcat weiterhin die Sitzungs-ID im Cookie und überschreibt die Sitzungs-ID in der URL.
So funktioniert die Sitzung
有了Session ID,服务器就可以创建HttpSession对象了,第一次调用request.getSession()方法,如果没有对应的HttpSession对象,则会创建一个新的,并将这个对象加入到org.apache.catalina.Manager的sessions容器中保存。Manage保存所有的session生命周期,Session过期被回收,服务器关闭,Session被序列化到磁盘。注意,一个客户端对应一个Session对象,这个对象正是保存我们创建的Session值的。
request.getSession()方法调用的StandardSession永远都会存在,即使与这个客户端关联的Session已经过期。如果过期,则会创建一个新的,但是以前设置的Session值将会丢失。
3 Cookie与Session安全性比较
Cookie将保存的数据通过HTTP头部从客户端传到服务端,从服务端再传回到客户端,所有的数据都保存在客户端浏览器中,这些数据都是可以访问到的,甚至可以通过插件添加、修改Cookie,所有Cookie的安全性是比较差的。相比较而言,Session将数据保存在服务器端,安全性高很多,只需要Cookie传回一个Cookie ID就可以,所以Session更适合保存用户隐私和重要的数据。
分布式Session框架
在大型互联网应用中,单用Cookie和Session都是不可行的,因为如果使用Cookie可以很好地解决应用的分布式部署问题,大型互联网应用系统一个应用有上百台机器,而且有很多不同的应用系统协同工作,由于Cookie是将数据存储在用户浏览器中,用户每次访问都会讲数据带回到服务器,也就解决了同一个用户的请求在不同服务器上处理而导致的Cookie不一致问题。
由于应用是一个集群,所以不能将Session都保存在每台服务器的内存中,如果每台服务器有几十万访问用户,服务器内存也容不下,即使容得下,也无法保证该Session同步到其他服务器中,所以共享这些Session需要将它们保存在专门的分布式缓存中,可以随时读取和写入,性能要够好满足要求,如memcache/redis或者淘宝的开源分布式框架Tair都是很好的选择。
表单重复提交问题
网站中有很多地方有重复提交表单问题,为了防止表单重复提交,就要标识用户的每一次访问请求,使得每一次访问请求对服务端来说都是唯一的,为了标识用户的每次请求,可以在用户请求的表单域增加一个隐藏表单项,其值为唯一的token,如:
<form id="form" method="post"> ... <input type=hidden name="token" value="xxx"/> </form>
用户请求表单时生成唯一的token,并且设置到该用户的Session中,等用户提交时检测这个token是否和Session中保存的token一致,如果一致,说明没有重复提交,同时把Session中的token更新成一个新的token值;否则用户提交上来的token已经不是当前请求的合法token,提交失败。
以上所述是小编给大家介绍的Dinge über Cookie und Sitzung in Java,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对PHP中文网的支持!
更多Dinge über Cookie und Sitzung in Java相关文章请关注PHP中文网!