
Application_Start מתרחש כשהאתר עולה לאוויר.Application_End מתרחש כשהאתר יורד.Application_Error מתרחש בשגיאה שלא טופלה במקום אחר.Session_Start מעלים את הערך ב-Application ב-1, וב-Session_End מורידים אותו. כיוון שה-Session_End מתרחש רק אחרי שפג זמן החיים של הסשן (ברירת מחדל 20 דקות), המספר הוא קירוב בלבד, וניתן לקצר את זמן החיים לדקה אחת לדיוק טוב יותר.הטקסט המלא של הדקות הראשונות בהרצאה «Application object» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אוקיי, האובייקט הבא שמאפשר לנו לשמור מידע בצד השרת נקרא אפליקיישן. בואו נסתכל מה זה אפליקיישן ואיך עובדים איתו. ניקח לחצן בשביל להדגים את עקרון הפעולה של אפליקיישן.
ID btn save, run את כמובן פרוור ולחצן ראשון ולחצן שני יאפשר לטעון את המידע. בנוסף ניקח לייבל.
מה שאנחנו נעשה בלחצנים, לחצן save יכניס מידע לתוך אובייקט האפליקיישן ולחצן Load יוציא את המידע מתוך האובייקט הזה ויכניס את המידע ללייבל.
אוקיי, איך אני מכניס מידע לתוך האובייקט? אז ראשית, בשביל להגיע לאובייקט הזה, אני פשוט רושם את המילה Application. זהו מאפיין שמאפשר לי להגיע לקולקשן הזה ולהכניס לתוך ערך.
מה זה בדיוק אפליקיישן? אנחנו ראינו שסשן זה מעין אוסף שהוא מוגדר אוטומטית עבור כל לקוח בגלישה הראשונה שלו לאתר שלנו וחי בשרת כל עוד הלקוח נחשב כגולש באתר וזה בעצם 20 דקות כברירת מחדל אחרי הגלישה האחרונה שלו או יותר נכון 20 דקות מהגלישה האחרונה שלו אובייקט הסשן נעלם נמחק ואם הלקוח הזה יגלוש שוב פעם לאתר ייווצר
לו אובייקט סשן אחר אבל אבל אובייקט סשן משרת ספציפית את הלקוח. אפליקיישן גם הוא אובייקט שנחשב אוסף, גם הוא אוסף שאפשר להגיע אליו על ידי מיקום הפריט או שם עבור הפריט, שם ייחודי עבור הפריט, ואני בצורה כזאת יכול להכניס לתוכו מידע.
בואו נבחר איזשהו פרט אינפורמציה, לדוגמה myColor = color green. לחצן save לוקח פרט אינפורמציה ומכניס אותו לאוסף הזה, במיקום myColor לחצן Load יוציא את המידע וישים אותו בלחצן btn.load.backColor שווה ניגש לאפליקיישן למיקום myColor שהגדרנו כלומר אנחנו ניגשים לפריט לפי ה-Name שלו וכמובן מבצעים פה casting ל-Color מפני שהערך שקיים
לנו הוא מטיפוס Object אנחנו רוצים להכניס אותו לתוך אובייקט מטיפוס Color יש צורך ב-Casting. בואו נריץ את האתר, בלחצן סייב אני מכניס את המידע לאפליקיישן, בלחצן לואוד אני שולף אותו ומשתמש בו.
עד כאן הכל טוב ויפה. מה היה קורה אם הייתי מבצע את הפעילות הזאת בפעם הראשונה לפני הפעילות הראשונה? כלומר, לפני שהייתי אי פעם מכניס ערך לתוך אפליקיישן מייקולור, הייתי ישר משתמש עם אפליקיישן מייקולור.
בואו נסתכל מה היה קורה במצב כזה. נריץ את האתר, ניגש ל-load ושוב פעם אנחנו מקבלים את אותה הודעת שגיאה שקיבלנו כשניסינו להשתמש עם סשן בלי שבאמת יהיה בו ערך.
אוקיי, כמובן בשביל לפתור את הבעיה הזאת אנחנו צריכים לבצע איזושהי בדיקה. האם אכן בפריט הזה שקיים פה יש משהו ששונה מנ"ל? אם הפריט הזה אכן מחזיק ערך ששונה מנהל, אני כמובן יכול לקחת אותו.
לבצע עבורו קאסטינג לקולור אני אוכל רק אם באמת יש בו קולור, אבל אני מניח שאם יש בו ערך זה בטוח יהיה קולור. אוקיי, בואו נבדוק עכשיו.
נלחץ על לחצן Load, אנחנו רואים ששום דבר לא מתבצע מפני שה-if מחזיר false ולכן אנחנו לא נכנסים לתוכו. נלחץ על לחצן Save בשביל להכניס מידע לתוך האפליקיישן, לחצן Load יטען את המידע ממנו.
עד כאן הכל טוב ויפה ואנחנו לא רואים שום הבדל בין האפליקיישן לבין הסשן. עוד מעט אנחנו נגיע להבדל ביניהם. כעת בואו נראה מה קורה אם יש לי דף נוסף באתר.
האם בדף השני אני יכול להשתמש במידע שהכנסתי באפליקיישן בדף אחר? אז בואו ניקח דף נוסף. בדף הנוסף אנחנו נגדיר לחצן שיאפשר לטעון את המידע מהאפליקיישן.
בואו ניקח גם את הקוד ב-C-Sharp. להומפייג' במקום הלייבל שלא השתמשנו איתה, נגדיר קישור לדף Second Page ונריץ שוב את ההומפייג'.
דבר ראשון, נכניס מידע לאפליקיישן, נבדוק האם המידע קיים בדף של ההומפייג' ואנחנו רואים שהמידע קיים, נלחץ על הלחצן Go to Second Page ואז ננסה לשלוף את המידע מה-Second Page.
ואכן הצלחנו להגיע למידע גם בדפים אחרים. זאת אומרת שלקוח מסוגל להכניס מידע לתוך אובייקט אפליקיישן ממש באותו אופן בדיוק כמו שהכנסנו לאובייקט הסשן ולשלוף את המידע הזה ולהשתמש בו בדפים אחרים או באותו הדף ממש בדומה לתחביר של הסשן.
כמו הסשן גם האפליקיישן זה אובייקט אוסף שקיים בצד השרת ומידע שאנחנו מכניסים בו שמור בתוך האוסף הזה שקיים בצד של השרת ולא בצד של הלקוח בדיוק כמו אובייקט סשן.
אם כך, מה ההבדל ביניהם? ההבדל הוא מאוד פשוט. אובייקט אפליקיישן קיים פעם אחת עבור כל הלקוחות. אובייקט סשן ראינו קיים בנפרד עבור כל לקוח.
לכן,