يشرح هذا المقال بالتفصيل:
1. إظهار الاستخدام الأساسي لملفات تعريف الارتباط
2. إظهار أذونات الوصول من ملفات تعريف الارتباط
3. إظهار حذف ملفات تعريف الارتباط
4. استخدم ملفات تعريف الارتباط لعرض آخر مرة قام فيها المستخدم بتسجيل الدخول
5. استخدم تقنية ملفات تعريف الارتباط لعرض العديد من الصور التي تم تصفحها مؤخرًا من قبل المستخدمين
6. اختبر كم عدد ملفات تعريف الارتباط وما مدى حجم ملف تعريف الارتباط لمتصفح Firefox؟
1. إظهار الاستخدام الأساسي لملفات تعريف الارتباط
index.jsp:
<٪@ page language = "java" import = "java.util.*" pageencoding = "utf-8" ٪> <! doctype html public "-// w3c // dtd html 4.01 </h1> HREF = "Cookiedemo"> إظهار الاستخدام الأساسي لملف تعريف الارتباط </a> <br/> </body> </html>
web.xml:
<؟ XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd "> <Servlet-Class> cn.hncu.servlets.cookiedemo </servlet-class> </servlet> <servlet-mapping> <stervlet-name> </swith-file-list> </web-app>
cookiedemo.java:
package cn.hncu.servlets ؛ استيراد java.io.ioException ؛ استيراد java.io.printwriter ؛ استيراد java.net.urldecoder ؛ استيراد java.net.urlencoder ؛ استيراد java.util.random javax.servlet.http.httpservlet ؛ استيراد javax.servlet.http.httpletrequest ؛ استيراد javax.servlet.http.htttpletrespons ServleTexception ، ioException {response.setContentType ("text/html ؛ charset = utf-8") ؛ printWriter out = response.getWriter () ؛ // اكتب ملفات تعريف الارتباط إلى العميل العشوائي r = new Random () ؛ int n = r.nextint (100) ؛ name string = "jack" ؛ // تنسيق ملفات تعريف الارتباط: key = value cookie c = new cookie ("name" ، name+n) ؛ C.SetMaxage (60*60) ؛ // قم بتعيين وقت انتهاء الصلاحية ، بالثواني C.SetPath (request.getContextPath ()) ؛ // هذا المسار هو:/اسم المشروع // في آلية ملفات تعريف الارتباط ، يتم التحكم في الأذونات من خلال المسار. فقط Servlets مع نفس المسار الذي يمكن للمسار أو الممر الفرعي الوصول إلى ملف تعريف الارتباط // إذا تم تعيين مسار ملف تعريف الارتباط كدليل جذر المشروع ، فإن جميع servlets تحت المشروع يمكنها الوصول إلى استجابة. addcookie (c) ؛ // يحتوي ملف تعريف الارتباط المظاهر هذا على سلسلة صينية str = "أحضر الصينية" ؛ str = urlencoder.encode (str ، "utf-8") ؛ // set الترميز باللغة الصينية! ! ! urlencode ترميز ملف تعريف الارتباط CSTR = جديد ملف تعريف الارتباط ("str" ، str) ؛ // إذا لم يتم تعيين setMaxage ، فإن المتصفح ينتهي بمجرد إغلاق CSTR.SetPath ("/") ؛ Response.addcookie (CSTR) ؛ // اقرأ ملف تعريف الارتباط cs [] = request.getCoOkies () ؛ // قراءة ملف تعريف الارتباط إذا (cs! = null) {// beware of for (cookie cc: cs) {string name2 = cc.getName () ؛ String val = cc.getValue () ؛ Val = urldecoder.decode (Val ، "UTF-8") ؛ // اتضح أنه سوف يفككها كما هو مشفر! فك التشفير الصيني ، ASCII كما هو! out.print (name2+"="+val+"<br/>") ؛ }} out.print ("Cook تم حفظه بنجاح!") ؛ }}نتائج التوضيح:
على النقر الأول! ستتم مناقشة الجلسة في المرة القادمة! يتم إنشاء Tomcat تلقائيًا وإرساله إلى العميل!
عند الدخول مرة أخرى!
الاسم+n لأنه يتم إنشاء N خلفها بشكل عشوائي ، يعرض هذا النقر دائمًا معلومات المعاملة السابقة!
2. إظهار أذونات الوصول من ملفات تعريف الارتباط
index.jsp:
<a href = "servlet/cookiedemo2"> إظهار أذونات الوصول من ملفات تعريف الارتباط </a> <br/> web.xml: <vervlet> <vervlet-name> cookiedemo2 </servlet-name> <Servlet-Class> <Srevlet-Name> CookiedEmo2 </servlet-name> <url-pattern>/servlet/cookiedemo2 </url-pattern> </servlet-mapping>
cookiedemo2.java:
package cn.hncu.servlets ؛ استيراد java.io.ioException ؛ استيراد java.io.printwriter ؛ استيراد java.util.random ؛ استيراد javax.servlet.servletexception ؛ استيراد javax.servlet.http.cookie ؛ import javax.servlet.htttp.htttp.httplet ؛ javax.servlet.http.httpservletrequest ؛ import javax.servlet.http.httpservletresponse ؛ cookiedemo2 public cookiedemo 2 يمتد httpservlet استجابة. printWriter out = response.getWriter () ؛ // اكتب ملفات تعريف الارتباط إلى العميل العشوائي r = new Random () ؛ int n = r.nextint (100) ؛ ملف تعريف الارتباط C = ملف تعريف ارتباط جديد ("العمر" ، ""+n) ؛ C.SetMaxage (60*60) ؛ // وقت انتهاء الصلاحية C.SetPath (request.getContextPath ()+"/servlet/cookiedemo2") ؛ // في آلية ملفات تعريف الارتباط ، يتم التحكم في الأذونات من خلال PATH // لأن url-pattern of cookiedemo هو دليل جذر المشروع/cookiedemo ، ولا هو طيور فرعية للمسار المحدد. ! ! إذا كان المسار مختلفًا ، فإن ملف تعريف الارتباط هو كائن مختلف ، مما يعني أن ملف تعريف الارتباط الذي يحمل نفس الاسم لن يتم تداخله! استجابة. addcookie (c) ؛ // قراءة ملفات تعريف الارتباط المرسلة من Client Cookie CS [] = request.getCoOkies () ؛ if (cs! = null) {for (cookie cc: cs) {string name = cc.getName () ؛ String val = cc.getValue () ؛ Out.print ("22222-"+name+"="+val+"<br/>") ؛ }} out.print ("يتم حفظ ملف تعريف الارتباط بنجاح!") ؛ }}نتائج التوضيح:
أولاً ، أدخل صفحة CookiedEmo2 للوصول إلى cookiedemo name-cookie
أدخل صفحة Cookiedemo مرة أخرى ، ولا يمكن الوصول
3. إظهار حذف ملفات تعريف الارتباط
index.jsp:
<a href = "servlet/delcookiedemo"> إظهار حذف ملفات تعريف الارتباط </a> <br/>
web.xml:
<Srevlet> <Srevlet-Name> delcookiedemo </servlet-name> <Servlet-class> cn.hncu.servlets.delcookiedemo </revlet-class> </servlet> <cervlet mapping> <servlet-name> delcookiedemo </qervlet-name> <Url-pattern>
delcookiedemo.java:
package cn.hncu.servlets ؛ استيراد java.io.ioException ؛ استيراد java.io.printwriter ؛ استيراد javax.servlet.servletexception ؛ استيراد javax.servlet.http.cookie ؛ javax.servlet.http.httpservlet ؛ javax.servlet.http.httpservletrequest ؛ import javax.servlet.http.httpservletresponse ؛ public class delcookiedemo يمتد httpservlet {public void doget (httpservledrequest request ، httpletresponse) استجابة. printWriter out = response.getWriter () ؛ cookie cs [] = request.getCoOkies () ؛ إذا كان (cs! = null) {for (cookie c: cs) {// لاجتياز "اسم ملف تعريف الارتباط" ، يجب أن يكون Servlet الحالي هو الإذن ، أي أن عنوان URL الخاص بـ servlet يجب أن يكون المسار الذي تم تعيينه بواسطة ملف تعريف الارتباط أو المسار الفرعي للمسار الذي تم تعيينه بواسطة // حذف اسم ملف تعريف الارتباط ("الاسم". ) ؛ // عند الحذف ، يتم الحكم على الإذن من خلال هذه الجملة! يجب أن يكون هذا هو نفس المسار الأصلي الذي تم تعيينه لحذفه ، وإلا لا يمكن حذفه! // للجملة السابقة ، فهمي الشخصي هو: لأنه إذا كانت إعدادات المسار الخاصة بك مختلفة ، فهي في الواقع مثل ملف تعريف الارتباط الجديد. وقت انتهاء صلاحية ملف تعريف الارتباط الجديد هو 0 ، والاسم هو "name" C.SetMaxage (0) ؛ // عندما انتهاء الصلاحية ، انظر التعيين على 0 ، مما يعني الحذف --- يتم تعيين شعار الحذف فقط هنا للاستجابة. addcookie (c) ؛ }}}}}}نتائج التوضيح:
في هذا الوقت ، لا يزال الاسم موجودًا.
نحن تزور delcookiedemo.
انتقل إلى الرابط الأول لقراءة:
لقد ذهب الاسم!
ستحذف Firefox تلقائيًا ملفات تعريف الارتباط المنتهية:
4. استخدم ملفات تعريف الارتباط لعرض آخر مرة قام فيها المستخدم بتسجيل الدخول
index.jsp:
<a href = "loginservlet"> استخدم ملفات تعريف الارتباط لعرض آخر مرة قام فيها المستخدم بتسجيل الدخول </a>
web.xml:
<Sradlet> <Sradlet-Name> loginservlet </rectlet-name> <Servlet-Class> cn.hncu.servlets.loginservlet </servlet-class> </servlet> <Servlet-mapping> <Sradlet-Name> loginservlet </servlet-name> <Url-pattern>
loginservlet.java:
package cn.hncu.servlets ؛ استيراد java.io.ioException ؛ استيراد java.io.printwriter javax.servlet.http.httpservletrequest ؛ import javax.servlet.http.httpservletresponse ؛ فئة loginservlet العامة يمتد httpservlet {public void doget (httpservletrequest request ، httpservledsponse) استجابة. printWriter out = response.getWriter () ؛ out.println ("<! doctype html public/"-// w3c // dtd html 4.01 Transitional // en/">") ؛ out.println ("<html>") ؛ out.println ("<head> <title> أظهر باستخدام ملفات تعريف الارتباط لعرض آخر وقت تسجيل الدخول للمستخدم </title> </head>") ؛ out.println ("<body>") ؛ // اقرأ ملف تعريف الارتباط Cookie الخاص بالعميل CS [] = request.getCoOkies () ؛ Boolean Boo = false ؛ if (cs! = null) {for (cookie c: cs) {// travel if ("logintime" .equals (c.getName ())) {String val = c.getValue () ؛ long dt = long.parselong (val) ؛ تاريخ D = تاريخ جديد (DT) ؛ SimpleDateFormat SDF = جديد spiStformat ("Yyyyy Year MM Month DD DATE HH: MM: SS") ؛ Out.print ("آخر وقت تسجيل الدخول الخاص بك كان:"+sdf.format (d)) ؛ بوو = صحيح ؛ استراحة؛ }}} if (boo == false) {// يعني أنه لا يوجد سجل وصول في عام واحد! لأن وقت انتهاء الصلاحية نوفر أدناه هو خارج. طباعة ("أنت تزور لأول مرة في العام الماضي ...") ؛ } // سواء كان المستخدمين الجدد أو القدامى ، سيتم إنشاء ملف تعريف ارتباط في آخر مرة وكتابة إلى العميل. ما لدي في الأصل هو تاريخ وقت التحديث D = تاريخ جديد () ؛ ملف تعريف الارتباط C = جديد ملف تعريف الارتباط ("logintime" ، ""+d.getTime ()) ؛ C.SetPath (request.getContextPath ()) ؛ C.SetMaxage (60*60*24*30*12) ؛ استجابة. addcookie (c) ؛ Out.println ("</body>") ؛ out.println ("</html>") ؛ out.flush () ؛ out.close () ؛ }}نتائج التوضيح:
الزيارة الأولى
قم بزيارة مرة أخرى:
5. استخدم تقنية ملفات تعريف الارتباط لعرض العديد من الصور التي تم تصفحها مؤخرًا من قبل المستخدمين
index.jsp:
<a href = "jsps/show.jsp"> انظر إلى تقنية ملفات تعريف الارتباط التي تستخدم الجمال لعرض العديد من الصور التي تم تصفحها مؤخرًا من قبل المستخدمين </a>
web.xml:
<Vervlet> <Sradlet-Name> Sharevlet </servlet-name> <Servlet-class> cn.hncu.servlets.showservlet </servlet-class> </servlet> <Servlet Mapping> <Serlet-Name> shopservlet </servlet-name> <url-pattern>
show.jsp:
<٪@ page import = "java.io.file" ٪> <٪@ page language = "java" import = "java.util.*" pageencoding = "utf-8" ٪> <! doctype html public "-// w3c // dtd html 4.01 transitional // en"> الحدود: 0px الصلبة #000 ؛ العرض: 100px ؛ الارتفاع: 100px ؛ الفائض: مخفي. } .span img {max-width: 100px ؛ _width: التعبير (this.width> 100؟ "100px": this.width) ؛ } .spans {border: 0px solid #000 ؛ العرض: 50 بكسل ؛ الارتفاع: 50 بكسل ؛ الفائض: مخفي. } .spans img {max-width: 50px ؛ _width: التعبير (this.width> 50؟ "50px": this.width) ؛ } </style> </head> <body> <h1> انظر إلى تقنية ملفات تعريف الارتباط باستخدام الجمال لعرض العديد من الصور التي تم تصفحها مؤخرًا من قبل المستخدمين </h1> <a href = "/mycookieweb/jsps/show.jsp"> انظر إلى التقنية السابقة للجمال لعرض العديد من الصور التي تم تصلبها مؤخرًا </a3> <٪ string str = null ؛ cookie cs [] = request.getCoOkies () ؛ if (cs! = null) {for (cookie c: cs) {if ("الصور" .equals (c.getName ())) {str = c.getValue () ؛ // ***. jpg break ؛ }}} if (str! = null) {string strs [] = str.split ("،") ؛ لـ (السلسلة S: Strs) {٪> <span> <img src = "<٪ = request.getContextPath () ٪>/imgs/<٪ = s ٪>"/> </span> <٪}} ٪> <br/> <hr/> <br/> <٪ // استخدم الملف لتمرير جميع الصور وعرضها. string path = getServletContext (). getRealPath ("/imgs") ؛ //system.out.printf(path) ؛ //d:/apache-tomcat-7.0.30/webapps/mycookieweb/jsps file = new java.io.file (path) ؛ file [] files = file.listfiles () ؛ if (files! = null) {٪> <٪ لـ (file f: files) {string imgname = f.getName () ؛ ٪> <span> <a href = "<٪ = request.getContextPath () ٪>/showimg؟ img = <٪ = imgname>"> <img src = "<٪ = request.getContextPath () ٪>/imgs/<٪ = imgname ٪>"shopervlet.java:
package cn.hncu.servlets ؛ استيراد java.io.ioException ؛ استيراد java.io.printwriter ؛ استيراد javax.servlet.servletexception ؛ استيراد javax.servlet.http.cookie ؛ javax.servlet.http.httpservlet ؛ javax.servlet.http.httpservletresponse ؛ الطبقة العامة simpleservlet يمتد httpservlet {public void doget (httpservletrequest request ، httpservletsponse) رمي servletexception ، ioException {response.setConttype ("text/html") ؛ printWriter out = response.getWriter () ؛ out.println ("<! doctype html public/"-// w3c // dtd html 4.01 Transitional // en/">") ؛ out.println ("<html>") ؛ Out.println ("<head> <title> servlet </title> </head>") ؛ out.println ("<body>") ؛ سلسلة IMG = request.getParameter ("IMG") ؛ سلسلة imgstr = "<img src = '"+request.getContextPath ()+"/imgs/"+img+"' //>"+img+"'// استخدم ملفات تعريف الارتباط لتسجيل معلومات الصورة التي تمت زيارتها بواسطة ملف تعريف الارتباط للمستخدم CS [] = request.getCoOkies () ؛ boolean boo = false ؛ إذا (cs! إذا كانت ("الصور". if (imgstrs [i] .equals (img)) {if (i == 1 && imgstrs.length == 2) {imgs = imgstrs [i]+"،"+imgstrs [0] ؛ IMGS = IMGSTRS [I]+"،+IMGSTRS [0] imgs = img+"،"+imgs ؛ // سيكون الأمر مزعجًا بعض الشيء لاستخدام الطريقة التالية: imgs+"،"+img if (imgs.split ("،" هذا ، من الأفضل عكس ترتيب إضافة ما سبق منع الصور المكررة. if (imgs.split ("،") }*/} C.SetValue (imgs) ؛ // update C.SetMaxage (60*60*24*30) ؛ C.SetPath ("/") ؛ // يعادل حقوق الوصول المريحة تمامًا ، أي أن جميع المشاريع يمكنها الوصول إلى الاستجابة. addcookie (c) ؛ بوو = صحيح ؛ استراحة؛ }}} إذا (boo == false) {// أشر إلى الزيارة الأولى ، أي أنه لا يوجد تصفح صورة في ملف تعريف الارتباط المتصفح c = ملف تعريف الارتباط الجديد ("الصور" ، img) ؛ C.SetMaxage (60*60*24*30) ؛ C.SetPath ("/") ؛ استجابة. addcookie (c) ؛ } out.println ("</body>") ؛ out.println ("</html>") ؛ out.flush () ؛ out.close () ؛ }}نتائج التوضيح:
6. اختبر كم عدد ملفات تعريف الارتباط وما مدى حجم ملف تعريف الارتباط لمتصفح Firefox؟
index.jsp:
<a href = "servlet/howmanyokookieservlet"> اختبار الحد الأقصى لعدد ملفات تعريف الارتباط وملف تعريف الارتباط الذي يدعمه متصفح Firefox </a> <br/>
web.xml:
<Srevlet> <Srevlet-Name> HowmanyCookie </servlet-name> <Servlet-Class> cn.hncu.servlets.howmanycookie </servlet-class> </servlet> <sterlet mapping> <servlet-name> howmanycookie </rvlet-name> <Url-pattern>
Howmanycookie.java:
package cn.hncu.servlets ؛ استيراد java.io.ioException ؛ استيراد java.io.printwriter ؛ استيراد java.net.urldecoder ؛ import javax.servletexception ؛ import javax.servlet.http.cookie ؛ javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛ الطبقة العامة howmanykookie يمتد httpservlet {public void doget (httpservletRequest request ، httpletresponse) استجابة. getWriter () ؛ /* // num of tests-firefox 47.0.1 يدعم ما يصل إلى 110 لـ (int i = 1 ؛ i <= 110 ؛ i ++) {cookie c = new cookie ("textnum"+i ، ""+i) ؛ C.SetMaxage (60*15) ؛ C.SetPath ("/") ؛ استجابة. addcookie (c) ؛ } *///حجم الاختبار --- 4092 بايت هو أكبر سلسلة تخزين ملفات تعريف الارتباط المفردة المدعومة S = "" ؛ لـ (int i = 0 ؛ i <4092 ؛ i ++) {s+= "1" ؛ } ملف تعريف الارتباط C = ملف تعريف ارتباط جديد ("اختبار" ، s) ؛ C.SetMaxage (60*15) ؛ C.SetPath ("/") ؛ استجابة. addcookie (c) ؛ ملف تعريف الارتباط CS [] = request.getCoOkies () ؛ // قراءة ملف تعريف الارتباط إذا (cs! = null) {// beware of for (cookie cc: cs) {string key = cc.getName () ؛ String val = cc.getValue () ؛ Out.print (key+"="+val+"") ؛ }}}}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.