English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
يُخزن Cookie في ملف نصي على جهاز المستخدم ويحفظ الكثير من معلومات المسار. على أساس تقنية Servlet، يمكن لتقنية JSP أن توفر دعمًا لـ HTTP Cookie.
عادةً هناك ثلاث خطوات لتحديد العميل المتكرر:
يُرسل سكربت السيرفر سلسلة من Cookie إلى المتصفح. على سبيل المثال، الاسم، العمر، رقم التعريف الشخصي وما إلى ذلك.
يخزن المتصفح هذه المعلومات على الجهاز المحلي ليكون جاهزًا عند الحاجة.
عندما يرسل المتصفح أي طلب إلى السيرفر التالي، فإنه يرسل أيضًا هذه معلومات Cookie إلى السيرفر، ثم يستخدم السيرفر هذه المعلومات لتحديد المستخدم أو القيام بأشياء أخرى.
هذا الفصل سيعلمك كيفية تعيين أو إعادة تعيين Cookie، وكيفية الوصول إليها وكيفية حذفها.
معالجة Cookie في JSP تتطلب تشفير وتشفير نصي Simplified Chinese، كما يلي:
String str = java.net.URLEncoder.encode("中文", "UTF-8"); // 编码 String str = java.net.URLDecoder.decode("编码后的字符串","UTF-8"); // 解码
Cookie غالبًا يتم تعيينها في رأس HTTP المعلوماتية (على الرغم من أن JavaScript يمكنه تعيينها مباشرة في المتصفح). في JSP، يجب إرسال معلومات رأس كما يلي لخدمة السيرفر:
HTTP/1.1 200 OK Date: Fri, 04 Feb 2015 21:03:38 GMT Server: Apache/1.3.9 (UNIX) PHP/4.0b3 Set-Cookie: name=w3codebox; expires=Friday, 04-Feb-17 22:03:38 GMT; path=/; domain=oldtoolbag.com Connection: close Content-Type: text/html
كما ترون، يحتوي رأس Set-Cookie على كائن من المفتاح والقيمة، ووقت GMT (التوقيت العالمي للمحطة العادية)، والمسار، ونطاق الدومين. يتم ترميز كائن المفتاح والقيمة كرابط.
إذا كان المتصفح معتمداً على حفظ الكوكيز، فإنه سيحفظ هذه المعلومات حتى انتهاء صلاحيتها. إذا كانت الصفحة التي يزورها المستخدم تطابق مسار أو نطاق الكوكيز، فإن المتصفح سيقوم بإعادة إرسال هذا الكوكيز إلى الخادم. تبدو معلومات رأس المتصفح كما يلي:
GET / HTTP/1.0 Connection: Keep-Alive User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc) Host: zink.demon.co.uk:1126 Accept: image/gif, */* Accept-Encoding: gzip Accept-Language: en Accept-Charset: iso-8859-1, *, utf-8 Cookie: name=xyz
يمكن لسكريبتات JSP الوصول إلى هذه الكوكيز من خلال استخدام طريقة getCookies() في جسم الطلب، حيث سيقوم هذا الطريقة بإرجاع مصفوفة من كائنات Cookie.
في الجدول أدناه، تم تقديم الطرق الشائعة لجسم الكوكيز:
الترتيب | الطريقة & الوصف |
---|---|
1 | public void setDomain(String pattern) تعيين اسم نطاق الكوكيز، مثل oldtoolbag.com |
2 | public String getDomain() الحصول على اسم نطاق الكوكيز، مثل oldtoolbag.com |
3 | public void setMaxAge(int expiry) تعيين مدة صلاحية الكوكيز، بمقياس الثواني، القيمة الافتراضية هي فترة حياة الجلسة الحالية |
4 | public int getMaxAge() الحصول على مدة صلاحية الكوكيز، بمقياس الثواني، القيمة الافتراضية هي -1، مما يعني أن الكوكيز ستبقى��ة حتى إغلاق المتصفح |
5 | public String getName() 返回 cookie 的名称,名称创建后将不能被修改 |
6 | public void setValue(String newValue) 设置 cookie 的值 |
7 | public String getValue() 获取cookie的值 |
8 | public void setPath(String uri) 设置 cookie 的路径,默认为当前页面目录下的所有 URL,还有此目录下的所有子目录 |
9 | public String getPath() 获取 cookie 的路径 |
10 | public void setSecure(boolean flag) 指明 cookie 是否要加密传输 |
11 | public void setComment(String purpose) 设置注释描述 cookie 的目的。当浏览器将 cookie 展现给用户时,注释将会变得非常有用 |
12 | public String getComment() 返回描述 cookie 目的的注释,若没有则返回 null |
使用 JSP 设置 cookie 包含三个步骤:
(1)创建一个 cookie 对象: 调用 cookie 的构造函数,使用一个 cookie 名称和值做参数,它们都是字符串。
Cookie cookie = new Cookie("key","value");
请务必牢记,名称和值中都不能包含空格或者如下的字符:
[ ] ( ) = , " / ? @ : ;
(2) 设置有效期:调用 setMaxAge() 函数表明 cookie 在多长时间(以秒为单位)内有效。下面的操作将有效期设为了 24 小时。
cookie.setMaxAge(60*60*24);
(3) منل منلم المنع المنعالمنع منلم المنع المنع المنع المنع
response.addCookie(cookie);
main.jsp لن من المنع المنع المنع المنع
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"% <%@ page import="java.net.*" %> <% // لمنع مننل منسم String من = مرتعجنةا (مرمسة(منسم "المنع"), "منل"); // 设لسم المنع المنع المنع Cookie name = new Cookie("name", str); Cookie url = new Cookie("url", request.getParameter("url)); // إعداد وقت انتهاء الصلاحية للكوكيز إلى 24 ساعة. name.setMaxAge(60*60*24); url.setMaxAge(60*60*24); // إضافة كوكيز إلى رأس الاستجابة response.addCookie(name); response.addCookie(url); %> <html> <head> <title>إعداد الكوكيز</title> </head> <body> <h1>إعداد الكوكيز</h1> <ul> <li><p><b>اسم الموقع:</b> <%= request.getParameter("name") %> </p></li> <li><p><b>عنوان الموقع:</b> <%= request.getParameter("url") %> </p></li> </ul> </body> </html>
فيما يلي نموذج بسيط لاستمارة HTML يتم من خلالها تقديم بيانات العميل إلى ملف main.jsp باستخدام طريقة GET، وإعداد الكوكيز:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>موقع تعليمي أساسي (oldtoolbag.com)</title> </head> <body> <form action="main.jsp" method=GET> اسم الموقع: <input type="text" name="name"> <br /> عنوان الموقع: <input type="text" name="url" /> <input type="submit" value="تأكيد" /> </form> </body> </html>
احفظ الشيفرة HTML أعلاه في ملف test.htm.
ضع هذا الملف في مجلد WebContent الحالي للمشروع jsp (في نفس الدليل مع main.jsp).
تقديم بيانات الاستمارة إلى ملف main.jsp من خلال زيارة http://localhost:8080/testjsp/test.html، كما يلي:
تجربة إدخال "اسم الموقع" و "عنوان الموقع"، ثم النقر على زر التأكيد، سيتم عرض "اسم الموقع" و "عنوان الموقع" في شاشتك، وضبط كوكيز "اسم الموقع" و "عنوان الموقع".
للقراءة Cookie، تحتاج إلى استدعاء request.getCookies() للحصول على مجموعة javax.servlet.http.Cookie، ثم مرورها عبر هذا المسار، باستخدام getName() وgetValue() للحصول على اسم وقيمة كل Cookie.
لنقرأ Cookie من المثال السابق، إليك كود ملف cookie.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"% <%@ page import="java.net.*" %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>الحصول على Cookie</title> </head> <body> <% Cookie cookie = null; Cookie[] cookies = null; // الحصول على بيانات cookies، وهو مجموعة cookies = request.getCookies(); إذا (cookies != null) { out.println("<h2> البحث عن اسم Cookie وإصداره </h2>"); للحصول على (int i = 0; i < cookies.length; i++) { cookie = cookies[i]; out.print("اسم المعامل: " + cookie.getName()); out.print("<br>"); out.print("قيمة المعامل: " + URLDecoder.decode(cookie.getValue(), "utf-8") + "<br>"); out.print("------------------------------------<br>"); } } out.println("<h2>لم يتم العثور على Cookie</h2>"); } %> </body> </html>
بعد زيارة المتصفح، سيكون الناتج هو:
حذف Cookie بسيط جدًا. إذا كنت ترغب في حذف Cookie، فاتبع الخطوات التالية:
الحصول على Cookie موجود مسبقًا واستخدامه في Cookie Object.
أعد تعيين فترة صلاحية Cookie إلى 0.
أضف هذا Cookie مرة أخرى إلى رأس الاستجابة.
البرنامج التالي يزيل Cookie يحمل الاسم "name"، عند تشغيل cookie.jsp للمرة الثانية، سيكون الاسم null.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"% <%@ page import="java.net.*" %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>الحصول على Cookie</title> </head> <body> <% Cookie cookie = null; Cookie[] cookies = null; // الحصول على cookies الحالية في النطاق الحالي، وهو مجموعة cookies = request.getCookies(); إذا (cookies != null) { out.println("<h2> البحث عن اسم Cookie وإصداره </h2>"); للحصول على (int i = 0; i < cookies.length; i++) { cookie = cookies[i]; إذا ((cookie.getName( )).compareTo("name") == 0 ) { cookie.setMaxAge(0); response.addCookie(cookie); out.print("حذف Cookie: " + cookie.getName() + "<br/>"); } out.print("اسم المعامل: " + cookie.getName()); out.print("<br>"); out.print("قيمة المعامل: " + URLDecoder.decode(cookie.getValue(), "utf-8") + "<br>"); out.print("------------------------------------<br>"); } } out.println("<h2>لم يتم العثور على Cookie</h2>"); } %> </body> </html>
النتيجة التي يتم إصدارها من خلال المتصفح هي:
بزيارة http://localhost:8080/testjsp/cookie.jsp مرة أخرى، ستحصل على النتيجة التالية:
يمكنك رؤية أن الكوكي المسمى "name" قد اختفي.
يمكنك أيضًا حذف الكوكي يدويًا من خلال تشغيل المتصفح، عن طريق النقر على قائمة الأدوات، ثم اختيار خيارات الإنترنت، النقر على حذف الكوكي، يمكنك حذف جميع الكوكي.