בעיה מעצבנת

ד ו ב י ר

New member
בעיה מעצבנת

ב"ה שלום יש לי את הפונקציה הבאה:
Sub dg_ItemCreated(sender As Object, e As DataGridItemEventArgs) response.write("1 - ") response.write(e.Item.Cells(3).Text & "<br>") End Sub​
הפחט שאני מקבל הוא:
1 - נושא 1 - 1 - 1 - 1 -​
למעשה יש שלש שורות בטבלה, והסיבה שיש 5 פעמים האירוע ItemCreated זה בגלל ה Header וה Footer. מה שאני לא מבין הוא מדוע לא מופיע ליד ה - 1 המילה שמופיעה בטבלה בעמודה 3, בכל השורות, ורק המילה שמופיעה בעמודה 3 בכותרת כן מופיעה? (ויש טקסט בכל אחד מהתאים בעמודה 3) תודה רבה מראש
 

ד ו ב י ר

New member
עד כמה שידוע לי, זה לא נכון.

יש default של 20 דקות. אצלי קורה משהו יותר מעצבן. אני עושה login לאתר, ואחרי שאני מאומת, עשיתי Session.Timeout = 30, ותוך הרבה פחות משלושים דקות אני רואה שה Session נגמר. (אני יודע שהוא נגמר כי כשעברתי לדף שצריך להציג את ה ("Session("UserID, אני מקבל מחרוזת ריקה.
 
יכול להיות לגבי הsession

יכול להיות שקראת את session הלא נכון. למשל: 1=("Session("UserId ובדף השני פנית למשהו אחר בטעות ("Session("UserID עם D גדולה
 

gilad g

New member
לא..

מנגנון ה-session, מבוסס על cookies. ולכן, כמו עוגיות, אם אתה פותח דפדפן חדש, הדפדפן החדש לא שולח את העוגיות של הדפדפן הישן, אלא אם הגדרת להן timeout באופן ידני. 20 הדקות שאתה מדבר עליהן הן timeout במקרה שבו משתמשים באותו דפדפן (נניח והגולש הלך לשירותים ל-20 דקות, והשאיר את הדפדפן פתוח..) ב-asp.net, יש סיבה נוספת שבגינה sessions הולכים לאיבוד - recycling של האפליקציה שלך. recycling כזה מתבצע ממגוון של סיבות (מישהו אמר MSDN/גוגל?), אבל הסיבה העיקרית שבגללה הוא קורה הוא קימפול מחדש של הפרויקט שלך. לדעתי זה גם המקרה אצלך
 

ד ו ב י ר

New member
עוד שאלה

האם אפשר לעשות ש cookie ימחק ברגע שמשתמש עוזב את האתר? תודה רבה מראש
 

gilad g

New member
זו גם ההתנהגות הדיפולטית של עוגיות.

עוגיות, כמו סשנים, נשמרים עד שהמשתמש סוגר את הדפדפן (עד סוף ה-session). אם רוצים להגדיר להם expiration ארוך יותר, עושים את זה ידנית.
 

ד ו ב י ר

New member
מה שהתכוונתי בשאלה כאן הוא

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

gilad g

New member
לא.

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

ד ו ב י ר

New member
בעיה

אני שמתי אצל המשתמש cookie ואני רוצה למחוק את זה כאשר ה session נגמר, אז הכנסתי את הפונקציה הבאה לתוך ה global.asax.
Sub Session_End(sender As EventArgs, e As EventArgs) Response.Cookies("cookie").Expires = DateTime.Now End Sub​
אבל זה לא עובד, וה cookie עדיין שם. בדקתי קצת באינטרנט וכתוב שצריכים לעשות:
Context.Response.Cookies("cookie").Expires = DateTime.Now​
אבל זה עזר לי. האם מישהו יכול להסביר לי איך לעשות את זה? תודה רבה מראש
 
אם אני לא טועה וזכרוני לא מטעני

הItem_created זה אירוע לפני שהאייטם נוצר ומכיוון שהוא עוד לא נוצר אז אין מידע לגביו ושוב זה לפי זיכרון , הכי טוב לבדוק בMSDN אם אני טועה לגבי הארועים של הדטהגריד
 

gilad g

New member
נכון,

כי אתה נרשם ל-event הלא נכון... אתה צריך להירשם ל-ItemDataBound, ולא ל-ItemCreated. ItemCreated נורה אחרי שה-item ב-DG שלך נוצר, ו-ItemDataBound נורה אחרי שה-item מילא את עצמו. בגלל שה-header וה-footer הם לא דינאמיים (אלא קבועים פחות או יותר), הם כבר מתמלאים ב-item created.
 
למעלה