PracticU

Session object - חלק 1

בלי כתוביותעם כתוביות
PracticU › קורס ASP.NET › Session object - חלק 1
מילון מושגים:
סשן - פרק זמן של פעילות רציפה בין משתמש למערכת, שבו נשמר מידע על מצבו, למשל לאחר התחברות לאתר.
תגית - סימון בקוד, למשל ב-HTML, שתוחם רכיב ומגדיר את תפקידו או תכונותיו. גם תווית לסימון וקיטלוג פריטים.
לקוח - תוכנה או מחשב שפונים לשרת ומבקשים ממנו שירות או מידע, למשל דפדפן שמבקש דף אינטרנט.
דפדפן - תוכנה שמציגה דפי אינטרנט ומריצה את הקוד שבהם, ומאפשרת לגלוש בין אתרים, למשל Chrome או Firefox.
שם משתמש - מזהה ייחודי שמשתמש מזין כדי להזדהות במערכת, לרוב יחד עם סיסמה.
מאפיין - תכונה שמצמידים לרכיב ומתארת אותו או את התנהגותו, למשל מאפיין של תגית HTML או שדה באובייקט.
אימות - תהליך שמוודא שהמשתמש או המערכת הם מי שהם טוענים שהם, בדרך כלל באמצעות סיסמה, קוד או תעודה.
אירוע - התרחשות שהמערכת מזהה ויכולה להגיב לה, כמו לחיצת עכבר, הקשה או סיום פעולה.

Session object - חלק 1
אובייקט Session שומר מידע בצד השרת, לכל גולש בנפרד. השיעור הקודם עוסק ב-ViewState, שנשמר בתגית מוסתרת שחוזרת ללקוח. Session לעומת זאת נשאר על השרת, והלקוח מקבל רק מזהה.
שמירה ושליפה
Session הוא אוסף שאפשר לגשת אליו לפי שם (מפתח), בדומה למילון. לדוגמה Session["MyColor"] = Color.Red שומר את הצבע, ו-Session["MyColor"] שולף אותו. כל פריט באוסף מוגדר כ-Object, ולכן בשליפה צריך המרה (cast) לסוג הנכון.
אם מנסים לשלוף פריט שלא נשמר, מתקבל השגיאה Object reference not set to an instance of an object. לכן לפני השימוש בודקים שהערך אינו null.
כל לקוח מקבל אוסף משלו
שני דפדפנים שגולשים לאותו אתר מקבלים אוספי Session נפרדים. מידע שלקוח אחד שמר לא נגיש ללקוח אחר. זה מה שמאפשר לשמור סל קניות או שם משתמש שמחובר.
זמן חיים של Session
ברירת המחדל היא 20 דקות מהגלישה האחרונה של הלקוח. אחרי זמן זה האובייקט נמחק והלקוח מקבל Session חדש ריק. את הזמן משנים בקובץ web.config, בתוך system.web ובתגית sessionState עם המאפיין timeout בדקות. לדוגמה 3 דקות.
בדיקת התחברות בעזרת Session
המרצה מדגים דף לוגין שבו לאחר בדיקה מוצלחת נשמר שם המשתמש ב-Session. בדף הבית, ב-Page_Load, בודקים אם המפתח שם המשתמש ריק. אם כן, מפנים את הלקוח לדף הלוגין. בדמו מוכח שגלישה ישירה לדף הבית מופנית לדף הלוגין, ושמשתמש שנכנס לאתר בדפדפן אחר לא רואה את המידע של הראשון.
הבדיקה המוצגת לאימות המשתמש היא פיקטיבית, בתוך הקוד. בפועל היא צריכה לבדוק בבסיס הנתונים.
Global.asax: אירועי Session
הקובץ Global.asax מכיל אירועים ברמת האתר. האירוע Session_Start מתרחש כשלקוח חדש מקבל Session, ו-Session_End מתרחש כשה-Session נהרס בגלל זמן החיים שפג. האירועים מתבצעים עבור כל לקוח בנפרד.
שימו לב
המרצה מציין שאין דרך סטנדרטית לדעת מתי הלקוח סגר את הדפדפן. ה-Session_End מתרחש רק אחרי שפג זמן החיים, ולא בזמן הסגירה.
בקצרה: Session הוא מידע פר לקוח שנשמר בשרת, והוא נעלם לאחר זמן חוסר פעילות.
השיעור הבא בקורס: Session object - חלק 2

פרקי ההרצאה: Session object - חלק 1

  1. 00:00

    חזרה על VIEW STATE

  2. 01:00

    האובייקט Session

  3. 02:53

    שמירת מידע ב-Session

  4. 04:31

    שליפת מידע ו-Casting

  5. 06:20

    חריגת Null ללא ערך

  6. 07:01

    בדיקת null לפני שימוש

  7. 08:17

    שימוש במידע בדף אחר

תמלול ההרצאה: Session object - חלק 1

הטקסט המלא של הדקות הראשונות בהרצאה «Session object - חלק 1» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:01

    אוקיי, אז מה שראינו בשיעור הקודם זה איך לשמור מידע בין ריצות חוזרות ונשנות לדף שלנו ברמת ה-ViewState, כלומר בתגית hidden שנשתלט בתוך דף ה-HTML, חוזרת ביחד עם קובץ ה-HTML בחזרה ללקוח, ובריצה הבאה של הלקוח לאותו הדף המידע שוב מגיע מהלקוח לשרת שאז מוציא את המידע מה-ViewState, התגית הזאת ויכול להחזיר

  2. 00:32

    אותו לערכים של התגיות האחרות או למידע אחר ברמת הדף שלנו. אבל יש עוד דרכים לשמור מידע בין ריצות חוזרות ונשנות לאתר שלנו מעבר ל-view state.

  3. 00:49

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

  4. 01:07

    מה זה בדיוק הסשן? תגית view state זאתי תגית htmlית שנמצאת בדף. המידע שנשמר בתגית הזאת לא באמת נשמר בצד השרת.

  5. 01:21

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

  6. 01:48

    איך אני מבצע את זה? בואו ניקח דוגמה ללחצן שמסוגל לשמור מידע באובייקט הזה ולחצן אחר שיהיה מסוגל לקרוא מידע מהאובייקט הזה. ניקח ASP בטן, יש לנו פה לחצן לשמירת מידע ולחצן נוסף לתינת המידע.

  7. 02:45

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

  8. 03:05

    האובייקט הזה נקרא fashion, אני רואה שיש לי גישה אליו. fashion זה אוסף, כלומר קולקשן, שכל פריט בו ניתן לגישה על ידי key או name, כלומר מפתח.

  9. 03:27

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

  10. 03:44

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

  11. 04:06

    אני כרגע הכנסתי את הצבע אדום לתוך תא הזיכרון בתוך האוסף הזה, שקראתי לו MyColor, כלומר השם של המידע שלי נקרא MyColor וה-Value שלו, הערך שלו זה color.red ואת זה הכנסתי לאוסף סשן.

  12. 04:28

    עכשיו איך אני מוציא את המידע מהאוסף? בלחצן Load אני פשוט מאוד פונה למקום שנקרא MyColor ובצורה כזאת יכול לשלוף ממנו את המידע. בואו נפתח משתנה color, נכניס לתוכו את הערך אבל מבחינת C-Sharp כל פריט שנמצא בתוך האוסף סשן הוא מטיפוס Object.

  13. 05:06

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

  14. 05:44

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

  15. 06:12

    שוב נריץ את האתר שלנו ונלחץ ישירות על לחצן לואוד בלי לפני זה ללחוץ על סייב. אני רואה שקיבלתי exception שנקראת object reference not set to an instance of an object.

  16. 06:32

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

  17. 06:44

    איפה היה לי פה אובייקט שהערך שלו נל? אז למעשה מה שקורה כאן זה שאם לא הכנסתי ערך לתוך אוסף ה-session ואני מנסה להשתמש בערך הזה, אז ערכו נ"ל.

  18. 06:58

    מן הראוי שנבדוק לפני זה שאכן באמת יש בערך הזה מידע תקף ולא נ"ל. כלומר, רק אם סשן במיקום MyColor שונה מנ"ל, רק אז אני רוצה לבצע את הפעולה הזאת של הוצאת המידע מתוך הסשן.

  19. 07:22

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

  20. 07:46

    יש לשים לב שהמידע לא נשמר בתגית view state. אין קשר בין המידע הזה לבין התגית הזאת של ה-view state. המידע של הפשן נשמר בצד של השרת במחשב השרת באתר שלנו, בתוך אוסף מיוחד שנקרא פשן, כאשר נתנו לו name ושם בדיוק המידע נשמר, הוא לא חוזר ללקוח.

  21. 08:17

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

  22. 08:31

    בואו ניצור פה עוד דף. ניקח פה דף שנקרא Second Page, נגדיר פה גם כן לחצן, נוציא את המידע שבסשן ונכניס אותו גם ללחצן השני.

  23. 09:41

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

לקורס המלא: קורס ASP.NET אונליין

ההרצאה הקודמת: ViewState

ההרצאה הבאה: Session object - חלק 2

הרצאות קשורות מקורסים אחרים

  • Object Serialization
  • המחלקה Object
  • Powershell object
  • חטיפה של HTTP Session

קורסים נוספים במסלול

  • קורס Entity Framework Core - עבודה עם מסד נתונים בדוט-נט
  • קורס דוט-נט - NET Core. - עם Rest API
  • קורס MVC
  • קורס Git ו-GitHub עם Visual Studio