English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

معالجة الكوكيز في JSP

يُخزن 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

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.

    طرق Servlet Cookie

في الجدول أدناه، تم تقديم الطرق الشائعة لجسم الكوكيز:

الترتيبالطريقة & الوصف
                1public void setDomain(String pattern) تعيين اسم نطاق الكوكيز، مثل oldtoolbag.com
                2public String getDomain() الحصول على اسم نطاق الكوكيز، مثل oldtoolbag.com
                3public void setMaxAge(int expiry) تعيين مدة صلاحية الكوكيز، بمقياس الثواني، القيمة الافتراضية هي فترة حياة الجلسة الحالية
                4public int getMaxAge() الحصول على مدة صلاحية الكوكيز، بمقياس الثواني، القيمة الافتراضية هي -1، مما يعني أن الكوكيز ستبقى��ة حتى إغلاق المتصفح
                5public String getName() 返回 cookie 的名称,名称创建后将不能被修改
                6public void setValue(String newValue) 设置 cookie 的值
                7public String getValue() 获取cookie的值
                8public void setPath(String uri) 设置 cookie 的路径,默认为当前页面目录下的所有 URL,还有此目录下的所有子目录
                9public String getPath() 获取 cookie 的路径
                10public void setSecure(boolean flag) 指明 cookie 是否要加密传输
                11public void setComment(String purpose) 设置注释描述 cookie 的目的。当浏览器将 cookie 展现给用户时,注释将会变得非常有用
                12public String getComment() 返回描述 cookie 目的的注释,若没有则返回 null

使用 JSP 设置 cookie

使用 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، كما يلي:

تجربة إدخال "اسم الموقع" و "عنوان الموقع"، ثم النقر على زر التأكيد، سيتم عرض "اسم الموقع" و "عنوان الموقع" في شاشتك، وضبط كوكيز "اسم الموقع" و "عنوان الموقع".

استخدام JSP لقراءة الكوكيز

للقراءة 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>

بعد زيارة المتصفح، سيكون الناتج هو:

    استخدام JSP لحذف Cookie

حذف 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" قد اختفي.

يمكنك أيضًا حذف الكوكي يدويًا من خلال تشغيل المتصفح، عن طريق النقر على قائمة الأدوات، ثم اختيار خيارات الإنترنت، النقر على حذف الكوكي، يمكنك حذف جميع الكوكي.