ملفات تعريف ارتباط جافا: كيفية إدارة جلسة Java Servlet باستخدام ملفات تعريف الارتباط
نشرت: 2020-08-19
صفحات الويب ليس لها ذاكرة. سيتم التعامل مع المستخدم المنتقل من صفحة إلى أخرى بواسطة موقع الويب باعتباره زائرًا جديدًا تمامًا. تعمل ملفات تعريف ارتباط الجلسة على تمكين موقع الويب الذي تزوره لتتبع حركتك من صفحة إلى أخرى حتى لا يُطلب منك نفس المعلومات التي قدمتها بالفعل إلى الموقع.
تتيح لك ملفات تعريف الارتباط المتابعة عبر العديد من صفحات الموقع بسرعة وسهولة دون الحاجة إلى المصادقة أو إعادة معالجة كل منطقة جديدة تقوم بزيارتها.
لكن في بعض الأحيان في تطبيقات الويب Java ، يجب أن نعرف من هو العميل ونعالج الطلب وفقًا لذلك.
على سبيل المثال ، يجب أن يعرف تطبيق عربة التسوق من الذي يرسل الطلب لإضافة عنصر وفي أي سلة يجب إضافة العنصر أو الذي يرسل طلب الخروج حتى يتمكن من تحصيل المبلغ لتصحيح العميل.
الجلسة هي حالة محادثة بين العميل والخادم ويمكن أن تتكون من طلب واستجابة متعددة بين العميل والخادم. نظرًا لأن كلا من HTTP و Web Server عديم الحالة ، فإن الطريقة الوحيدة للحفاظ على الجلسة هي عندما يتم تمرير بعض المعلومات الفريدة حول الجلسة (معرف الجلسة) بين الخادم والعميل في كل طلب واستجابة.

لنقم الآن بإنشاء مشروع ويب ديناميكي بسيط في Eclipse والذي يشرح إدارة جلسة Java Servlet باستخدام ملفات تعريف الارتباط.
فيما يلي الخطوات:
- إنشاء مشروع ويب ديناميكي:
CrunchifySessionManagementByCookie
-
crunchify-login.html
: إنشاء صفحة ترحيب لتطبيق ما -
CrunchifyLoginServlet.java
- يعتني بطلب تسجيل الدخول -
CrunchifyLogoutServlet.java
- يعتني بطلب تسجيل الخروج -
web.xml
- ملف واصف النشر (ألا ترى web.xml؟ اتبع هذا البرنامج التعليمي) -
CrunchifyLoginSuccessful.jsp
- تتم إعادة توجيه طلب النجاح إلىLoginSuccess.jsp
، وسيتم استخدام ملف تعريف الارتباط هذا هناك لتتبع الجلسة. لاحظ أيضًا أن مهلة ملف تعريف الارتباط مضبوطة على 60 دقيقة.

يجب أن يقرأ آخر:
- مثال / برنامج تعليمي حول Spring MVC: Hello World - Spring MVC 3.2.1
- كيفية تحديث الرسم البياني Sparkline كل 3 ثوانٍ في Spring MVC (تحديث في الوقت الفعلي)
1. crunchify-login.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
< ! DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" > < html > < head > < meta http - equiv = "Content-Type" content = "text/html; charset=US-ASCII" > < title > Crunchify Login Form - Session Management by Cookies < / title > <style type ="text/css"> body { background-image : url ( 'https://cdn.crunchify.com/bg.png' ) ; } </style> < / head > < body > < div align = "center" > < br > < br > < form action = "CrunchifyLoginServlet" method = "post" > Enter Your Username : < input type = "text" name = "crunchifyUser" > < br > Enter Your Password : < input type = "password" name = "crunchifyPassword" > < br > < br > < br > < input type = "submit" value = "Login" > < / form > < / div > < / body > < / html > |
2. CrunchifyLoginServlet.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
package com . crunchify . tutorials ; import java . io . IOException ; import java . io . PrintWriter ; import javax . servlet . RequestDispatcher ; import javax . servlet . ServletException ; import javax . servlet . annotation . WebServlet ; import javax . servlet . http . Cookie ; import javax . servlet . http . HttpServlet ; import javax . servlet . http . HttpServletRequest ; import javax . servlet . http . HttpServletResponse ; /* * Author: Crunchify.com * */ /** * Servlet implementation class LoginServlet */ @WebServlet ( "/CrunchifyLoginServlet" ) public class CrunchifyLoginServlet extends HttpServlet { private static final long serialVersionUID = 1L ; private final String userID = "CrunchifyUser" ; private final String password = "CrunchifyPassword" ; protected void doPost ( HttpServletRequest request , HttpServletResponse response ) throws ServletException , IOException { // get request parameters for userID and password String crunchifyUser = request . getParameter ( "crunchifyUser" ) ; String pwd = request . getParameter ( "crunchifyPassword" ) ; if ( userID . equals ( crunchifyUser ) && password.equals(pwd)) { Cookie crunchifyCookie = new Cookie("crunchifyUser", crunchifyUser); // setting cookie to expiry in 60 mins crunchifyCookie . setMaxAge ( 60 * 60 ) ; response . addCookie ( crunchifyCookie ) ; response . sendRedirect ( "CrunchifyLoginSuccess.jsp" ) ; } else { RequestDispatcher rd = getServletContext ( ) . getRequestDispatcher ( "/crunchify-login.html" ) ; PrintWriter out = response . getWriter ( ) ; out . println ( "<font color=red>Please make sure you enter UserID/Pass as \"CrunchifyUser : CrunchifyPassword\".</font>\n" ) ; rd . include ( request , response ) ; } } } |
3. CrunchifyLogoutServlet.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
package com . crunchify . tutorials ; import java . io . IOException ; import javax . servlet . ServletException ; import javax . servlet . annotation . WebServlet ; import javax . servlet . http . Cookie ; import javax . servlet . http . HttpServlet ; import javax . servlet . http . HttpServletRequest ; import javax . servlet . http . HttpServletResponse ; /* * Author: Crunchify.com * */ /** * Servlet implementation class LogoutServlet */ @WebServlet ( "/CrunchifyLogoutServlet" ) public class CrunchifyLogoutServlet extends HttpServlet { private static final long serialVersionUID = 1L ; protected void doPost ( HttpServletRequest request , HttpServletResponse response ) throws ServletException , IOException { response . setContentType ( "text/html" ) ; Cookie loginCookie = null ; Cookie [ ] cookies = request . getCookies ( ) ; if ( cookies ! = null ) { for ( Cookie cookie : cookies ) { if ( cookie . getName ( ) . equals ( "crunchifyUser" ) ) { loginCookie = cookie ; break ; } } } if ( loginCookie ! = null ) { loginCookie . setMaxAge ( 0 ) ; response . addCookie ( loginCookie ) ; } response . sendRedirect ( "crunchify-login.html" ) ; } } |
4. web.xml
1 2 3 4 5 6 7 8 9 10 |
<? xml version = "1.0" encoding = "UTF-8" ?> < web - app xmlns : xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns = "http://java.sun.com/xml/ns/javaee" xsi : schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id = "WebApp_ID" version = "3.0" > < display - name > CrunchifySessionManagementByCookie < / display - name > < welcome - file - list > < welcome - file > crunchify - login . html < / welcome - file > < / welcome - file - list > < / web - app > |
5. CrunchifyLoginSuccessful.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
<% @ page language = "java" contentType = "text/html; charset=US-ASCII" pageEncoding = "US-ASCII" %> < ! DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" > < html > < head > < meta http - equiv = "Content-Type" content = "text/html; charset=US-ASCII" > < title > Crunchify - Login Successful - Session management by Cookies < / title > <style type ="text/css"> body { background-image : url ( 'https://cdn.crunchify.com/bg.png' ) ; } </style> < / head > < body > < div align = "center" > < br > < br > <% String userName = null ; Cookie [ ] cookies = request . getCookies ( ) ; if ( cookies ! = null ) { for ( Cookie cookie : cookies ) { if ( cookie . getName ( ) . equals ( "crunchifyUser" ) ) userName = cookie . getValue ( ) ; } } if ( userName == null ) response . sendRedirect ( "crunchify-login.html" ) ; %> < h3 > Hi <%= userName %> , Login successful . < / h3 > < br > < form action = "CrunchifyLogoutServlet" method = "post" > < input type = "submit" value = "Logout" > < / form > < / div > < / body > < / html > |
لنقم الآن بتشغيل هذا المثال:
-
CrunchifySessionManagementByCookie
Project على Tomcat وتشغيل Tomcat.

- قم بتوجيه عنوان URL الخاص بالمتصفح إلى http: // localhost: 8080 / CrunchifySessionManagementByCookie / crunchify-login.html

- صفحة النجاح

- صفحة تسجيل الدخول الفاشلة

الآن كيف تتحقق مما إذا تم تعيين ملف تعريف الارتباط بشكل صحيح.

حاول تنزيل أي Cookie Manager Extension
الارتباط وسترى Cookie
في متصفحك كما هو موضح أدناه.

يُرجى إعلامي إذا كنت تواجه أي مشكلة في التشغيل فوق كود Servlet Cookie Management.