טיפול בעוגיות והפעלה ב- Java Servlet

1. סקירה כללית

במדריך זה נעסוק הטיפול בעוגיות והפעלות בג'אווה, באמצעות Servlets.

בנוסף, נתאר בקרוב מהו קובץ cookie ונחקור כמה מקרי שימוש לדוגמה עבורו.

2. יסודות העוגיות

פשוט שים, קובץ cookie הוא פיסת נתונים קטנה המאוחסנת בצד הלקוח בה משתמשים השרתים בעת תקשורת עם לקוחות.

הם משמשים לזיהוי לקוח בעת שליחת בקשה עוקבת. הם יכולים לשמש גם להעברת נתונים מסרוולט אחד למשנהו.

לפרטים נוספים, עיין במאמר זה.

2.1. צור עוגיה

ה עוגייה הכיתה מוגדרת בjavax.servlet.http חֲבִילָה.

כדי לשלוח אותו ללקוח, אנחנו צריכים צור אחד והוסף אותו לתגובה:

קובץ cookie uiColorCookie = קובץ Cookie חדש ("צבע", "אדום"); response.addCookie (uiColorCookie); 

עם זאת, ה- API שלו הרבה יותר רחב - בואו נחקור אותו.

2.2. הגדר את תאריך התפוגה של העוגיה

אנו יכולים לקבוע את הגיל המקסימלי (בשיטה maxAge (int)) המגדיר כמה שניות עוגיה נתונה צריכה להיות תקפה למשך:

uiColorCookie.setMaxAge (60 * 60); 

קבענו גיל מקסימלי לשעה. לאחר זמן זה, לקוח (דפדפן) לא יכול להשתמש בקובץ ה- cookie בעת שליחת בקשה ויש להסיר אותו גם ממטמון הדפדפן.

2.3. הגדר את תחום העוגיה

שיטה שימושית נוספת ב עוגייה API הוא setDomain (מחרוזת).

זה מאפשר לנו לציין שמות דומיינים אליהם הוא אמור להיות מועבר על ידי הלקוח. זה תלוי גם אם אנו מציינים את שם הדומיין במפורש או לא.

בואו נגדיר את הדומיין לקובץ cookie:

uiColorCookie.setDomain ("example.com");

העוגיה תימסר לכל בקשה שתוגש על ידי example.com ותת-הדומיינים שלה.

אם לא נציין דומיין במפורש, הוא יוגדר לשם הדומייןשיצר עוגיה.

לדוגמא, אם ניצור עוגיה מ- example.com והשאיר את שם הדומיין ריק ואז הוא יועבר ל www.example.com (ללא תת תחומים).

יחד עם שם תחום, אנו יכולים גם לציין נתיב. בואו נסתכל על זה בהמשך.

2.4. הגדר את נתיב העוגיה

הנתיב מציין היכן תועבר קובץ cookie.

אם אנו מציינים נתיב במפורש, אז עוגייה יועבר לכתובת האתר הנתונה ולכל ספריות המשנה שלה:

uiColorCookie.setPath ("/ welcomeUser");

באופן מרומז, הוא יוגדר לכתובת האתר שיצרה קובץ cookie וכל ספריות המשנה שלו.

עכשיו בואו נתמקד כיצד אנו יכולים לאחזר את הערכים שלהם בתוך a סרוולט.

2.5. קרא עוגיות בסרוולט

עוגיות מתווספות לבקשה על ידי הלקוח. הלקוח בודק את הפרמטרים שלו ומחליט אם הוא יכול למסור אותו לכתובת האתר הנוכחית.

אנו יכולים להשיג את כל העוגיות על ידי התקשרות getCookies () על הבקשה (HttpServletRequestהועבר ל סרוולט.

אנו יכולים לחזור על המערך הזה ולחפש את זה שאנחנו צריכים, למשל, על ידי השוואת שמותיהם:

public readCookie (מפתח מחרוזת) אופציונלי {return Arrays.stream (request.getCookies ()) .filter (c -> key.equals (c.getName ())) .map (Cookie :: getValue) .findAny (); }

2.6. הסר עוגיה

להסר עוגיה מדפדפן, עלינו להוסיף תשובה חדשה לתגובה עם אותו שם, אך עם maxAge הערך מוגדר ל- 0:

Cookie userNameCookieRemove = קובץ cookie חדש ("userName", ""); userNameCookieRemove.setMaxAge (0); response.addCookie (userNameCookieRemove);

מקרה שימוש לדוגמא להסרת קובצי cookie הוא פעולת התנתק למשתמש - יתכן ונצטרך להסיר נתונים שנשמרו להפעלת משתמשים פעילה.

כעת אנו יודעים כיצד אנו יכולים להתמודד עם עוגיות בתוך a סרוולט.

לאחר מכן, נכסה על אובייקט חשוב נוסף אליו אנו מגיעים לעתים קרובות מאוד מתוך סרוולט - א מוֹשָׁב לְהִתְנַגֵד.

3. HttpSession לְהִתְנַגֵד

ה HttpSession היא אפשרות נוספת לאחסון נתונים הקשורים למשתמש על פני בקשות שונות. הפעלה היא אחסון בצד השרת המחזיק נתונים קונטקסטואליים.

הנתונים אינם משותפים בין אובייקטים שונים של הפעלות (הלקוח יכול לגשת לנתונים מההפעלה שלו בלבד). הוא מכיל גם צמדי ערך מפתח, אך בהשוואה לעוגיה, הפעלה יכולה להכיל אובייקט כערך. מנגנון הטמעת האחסון תלוי בשרת.

הפעלה מותאמת עם לקוח על ידי קובצי cookie או פרמטרים של בקשה. מידע נוסף ניתן למצוא כאן.

3.1. קבלת מושב

אנחנו יכולים להשיג HttpSession היישר מבקשה:

הפעלת HttpSession = request.getSession (); 

הקוד שלעיל ייצור מושב חדש למקרה שהוא לא קיים. אנו יכולים להשיג את אותו הדבר על ידי קריאה:

request.getSession (נכון)

במקרה שרק נרצה להשיג מושב קיים ולא ליצור מפגש חדש, עלינו להשתמש ב:

request.getSession (שקר) 

אם ניגש לדף JSP בפעם הראשונה, מושב חדש נוצר כברירת מחדל. אנו יכולים להשבית התנהגות זו על ידי הגדרת ה- מוֹשָׁב מייחס ל שֶׁקֶר:

ברוב המקרים, שרת אינטרנט משתמש בקובצי Cookie לניהול הפעלות. כאשר נוצר אובייקט הפעלה, שרת יוצר עוגיה איתו JSESSIONID מפתח וערך המזהים מושב.

3.2. מוֹשָׁב תכונות

אובייקט ההפעלה מספק חבורה של שיטות לגישה (יצירה, קריאה, שינוי, הסרה) של תכונות שנוצרו עבור הפעלת משתמש נתונה:

  • setAttribute (מחרוזת, אובייקט) היוצר או מחליף מאפיין הפעלה עם מפתח וערך חדש
  • getAttribute (מחרוזת) הקורא ערך תכונה עם שם נתון (מפתח)
  • removeAttribute (מחרוזת) המסיר תכונה עם שם נתון

אנחנו יכולים גם לבדוק בקלות תכונות הפעלות קיימות על ידי שיחה getAttributeNames ().

כפי שכבר הזכרנו, נוכל לאחזר אובייקט מושב מבקשה. כאשר כבר יש לנו את זה, נוכל לבצע במהירות שיטות שהוזכרו לעיל.

אנו יכולים ליצור תכונה:

הפעלת HttpSession = request.getSession (); session.setAttribute ("attributeKey", "Value Sample"); 

ניתן להשיג את ערך המאפיין באמצעות המפתח שלו (שם):

session.getAttribute ("attributeKey"); 

אנו יכולים להסיר מאפיין כאשר איננו זקוקים לו יותר:

session.removeAttribute ("attributeKey"); 

מקרה שימוש ידוע עבור מושב משתמשים הוא לפסול נתונים שלמים שהוא מאחסן כאשר משתמש מתנתק מאתרנו. אובייקט ההפעלה מספק פיתרון עבורו:

session.invalidate (); 

שיטה זו מסירה את כל ההפעלה משרת האינטרנט כך שלא נוכל לגשת לתכונות ממנו יותר.

HttpSession לאובייקט יש יותר שיטות, אך זו שהזכרנו הן הנפוצות ביותר.

4. מסקנה

במאמר זה סקרנו שני מנגנונים המאפשרים לנו לאחסן נתוני משתמשים בין בקשות עוקבות לשרת - ה- cookie וההפעלה.

זכור כי פרוטוקול ה- HTTP הוא חסר מדינה, ולכן חובה לשמור על מצב בין בקשות.

כמו תמיד, קטעי קוד זמינים ב- Github.