
express-session, מייבאים אותו ומוסיפים כ-middleware עם אובייקט קונפיגורציה.secret) לקידוד המזהה, מחרוזת כלשהי שממציאים.request.session מציבים שדות כמו color ו-number, בדומה לדוגמה של cookies, אבל המידע נשמר בשרת. קריאה היא ממאפייני request.session, והשמדה היא עם request.session.destroy.Math.random. בכרום המספר נשאר קבוע בכל קריאה, גם בכרטיסייה או בחלון אחר, כי ה-cookie זהה. בדפדפן אחר (Internet Explorer) הערך undefined, ואחרי שמירה שם מתקבל מספר אחר, ובכרום המספר הראשון לא השתנה.undefined.name של ה-cookie: בדוגמה testerCookie.secret: מחרוזת להצפנת המזהה, בדוגמה kittens are cute.resave: true: בכל גלישה הספירה של זמן ה-timeout מתחילה מחדש. ברירת המחדל של ה-timeout היא כ-20 דקות ואפשר לשנות אותה.saveUninitialized: false: לא יוצרים session כשאין בו צורך.sessionStorage ו-localStorage של HTML5. אלה נשמרים בלקוח, גדולים יותר (עד כ-5 מגה) ולא נשלחים אוטומטית לשרת. הראשון דומה ל-cookie non-persistent והשני ל-persistent.הטקסט המלא של הדקות הראשונות בהרצאה «ניהול סשן Session ב-NodeJS» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
בנושא ה-State Management שלנו אנחנו עוברים לטכניקה אחרת לחלוטין בשביל לשמור מידע. שוב, המידע לא קשור למידע ב-Database, דטאבייס כבר ראינו איך עושים. אז מה שאנחנו רוצים עכשיו לשמור זה מידע בזיכרון צד השרת אבל ייחודי לכל לקוח בנפרד.
זאת אומרת שלקוח אנחנו שומרים לא ספציפית את המידע שלו, בדיוק כמו ש-cookie היה נשמר ספציפית עבור הלקוח אבל הוא היה נשמר במחשב של הלקוח. כאן אני רוצה לשמור מידע, כמובן מידע אחר, זה לא ה-preferences של המשתמש, אבל אני רוצה לשמור אותו בצד של השרת עבור לקוחות, כלומר כל לקוח את המידע שלו.
הקונספט הזה נקרא סשן. אז איך זה מתבצע? ראשית אנחנו מתקינים npm i, אנחנו רוצים להתקין אקספרס מקף סשן. יש לנו את ההתקנה, אנחנו רוצים פה למעלה ליצור אקספרס סשן, require express session בצורה כזאת, והדבר הראשון שאנחנו צריכים להגדיר זה middleware של אקספרס סשן, כאשר יש לנו צורך לתת קונפיגורציה כאן.
באובייקט. עכשיו ראשית אנחנו צריכים להבין שסשן שאנחנו שומרים זה פר לקוח, זאת אומרת שלכל לקוח שהולך להתחבר אלינו הולך להיות אובייקט ששומר מידע והמידע הזה יהיה שייך רק לאותו לקוח.
אז אם כרגע מחוברים אלינו 40 לקוחות תביא אלינו 40 אובייקטים כל אובייקט משרת רק את הלקוח הספציפי שלו והשאלה מה שאני שואלת היא איך המערכת של ה-session בסרבר side יודעת מכל ה-40 אובייקטים איזה אובייקט שייך לאיזה לקוח?
והתשובה, בכדי שהיא תנהל את זה, אז היא שולחת קוקי לקליינט שיש לו משהו שנקרא ID שמזהה את ה-session שלו בסרבר.
ה-ID הזה נקרא fashion ID. ואז כל פעם שמתבצעת גלישה, אמרנו בעבר שכל הקוקיז נשלחים לשרת, אז השרת שולף את הקוקי ולפי ה-ID יודע להמשיך ולשייך לו את האובייקט המתאים בצד של השרת.
אז ההגדרה הראשונה שאנחנו צריכים לתת זה מה השם של הקוקי שאנחנו רוצים. בואו נקרא לה טסטר קוקי, כי אנחנו כרגע מבצעים איזושהי בדיקה. עכשיו ה-Session ID זה מידע שיכול להיחשב כסוג של מידע רגיש, כי אם מישהו בעצם לוקח לי את ה-Session ID, אז הוא יכול להתחזות אליי. יש בעצם כל מיני פריצות שמאפשרות להתחזות
לאנשים על ידי ה-Session ID, ולכן הפרנטר הבא שאנחנו נותנים זה איזשהו Encryption Key בשביל ה-Session ID, שהמערכת תערבל אותו, תקודד אותו בעזרת ה-Key הזה, וזה סתם מחרוזת שאנחנו ממציאים.
בואו נמציא את המחרוזת, איטנס אר קיוט, לא משנה מה המחוזת. הדבר הבא זה רי סייב ואנחנו רוצים אותו כתור. זה בעצם מציין שכל גלישה הזמן של הקוקי הולך להתחיל להיספר מחדש, כל גלישה של הלקוח.
לקוקי יש טיים-אאוט, סליחה, לסשן יש טיים-אאוט, זה אומר אם הלקוח גולש אלינו לראשונה נדלק לו איזה שהוא טיים-אאוט שאם הוא לא גולש במשך הטיימ-אוט הזה, שביידיפולט הטיימ-אוט הזה בערך 20 דקות, אז אוטומטית הסשן שלו נעלם.
אנחנו כמובן יכולים דרך קונפיגואציה לשנות את הטיימ-אוט הזה. ובמידה והיוזר במהלך ה-20 דקות האלה גולש עוד פעם, האם אנחנו רוצים שה-20 דקות יתחילו להיספר מחדש?
ברוב המקרים כן, כי זה אומר שהמשתמש ממשיך לגלוש לנו באתר. סייב טור, הדבר הבא סייב אנינישיאלייזד, זה אנחנו רוצים פולס וכאן בעצם האם אנחנו בעצם רוצים להשתמש או לייצר קוקי, לייצר סשן גם אם אנחנו לא באמת צריכים אותו או גולשים לאיזה מקום שהוא לא נדרש, אז פה זה פולס.
בואו נתחיל לבנות לעצמנו ראשית איזושהי פונקציה סייב סשן ואנחנו רוצים להפעיל פה את הפונקציה הזאת שמקבלת requestResponse ואיך אנחנו משתמשים עם ה-session.
אז ב-request קיים סשן ואנחנו יכולים להכניס אליו מה שבא לנו. בואו נכניס איזשהו color: RedRequestSessionNumber123 ממש דומה לדוגמה שעשינו עם הקוקיז אבל שימו לב שהמידע הזה נשמר פר לקוח בצד של השרת בצד של השרת לא בצד של הלקוח הדבר הבא בואו נעשה פה איזה קונסול לוג סייבד
ורספונס אנד סיימנו בואו נבצע פונקציה נוספת ניקח את כל זה נשכפל ונקרא לפונקציה readSession. אנחנו רוצים לגשת console.log ואנחנו רוצים לבדוק מה ה-color.
ה-Color נמצא ב-requestSession, מה ה-number? requestSession.number זה אנחנו לא צריכים, ופעילות אחרונה שהיינו רוצים לבצע זה clear, וזה requestSession, פה יש את האובייקט של ה-session שלנו, וזה הורס את הסשן עבור אותו לקוח.
בואו נבצע פה console.log stride. מה שאנחנו רוצים לבצע זה רק לבדוק את זה. אז בואו נריץ ונגלוש. כרגע הוא אומר לי cannot get כמובן כי לא גלשתי לאחד מהרורטים האלה.
אנחנו רוצים האמת גם להציג את ה-F12. בואו ניפטר רגע מהקוקי של הלנגוויג' שהיה לנו בעבר, נרפרש, ואנחנו רוצים לגלוש לסייב סשן, גו, ושימו לב שיש לי