PDA

View Full Version : سوال: تایمر همراه با SESSION



Nasim_m
یک شنبه 22 اردیبهشت 1387, 01:28 صبح
من توی برنامه ام یک شمارنده دارم که آن را با تایمر آژاکس پیاده سازی کردم اما مشکل اینجا بود که اگر در حین کار کاربر صفحه را رفرش می کرد شمارنده دوباره از اول شروع به کار می کرد؟
برای حل این مشکل من در هر تیک تایمر که شمارنده را تغییر می داد آن را در SESSION ذخیره کردم و در هنگام لود صفحه اگر POSTBACK نبود دوباره آن را در شمارنده قرار می دادم با این کار مشکل حل شده و شمارنده به هیج عنوان ریست نمی شود. ولی می خواستم بدانم که این روش چقدر بهینه است و آیا روش بهتری برای این کار وجود دارد یا نه؟

shahab_ksh
یک شنبه 22 اردیبهشت 1387, 18:56 عصر
از قدیم گفتند سکوت علامت رضایته:لبخندساده:
پس با این حساب من فرض می کنم که این بهترین کاریه که می شه کرد
اگر هم بعدا کسی بهم گیر داد که این چه کاری بود که کردی؛ اسم و آدرس تک تکتون رو در میارم بعد میام حسابتون رو می رسم:لبخند::لبخند::لبخند:


دیشب خواستم جواب سولتون رو بدم ولی فیلم دیدن رو تو نصف شب ترجیح دادم...
خودتون رو تو دردسر نندازین بعدا گلگی و گریه و زاری راه بندازین من الان دارم میرم بیرون با دوستان شب اومدم اگه کسی رو نداد جوابتون رو میدم

shahab_ksh
دوشنبه 23 اردیبهشت 1387, 00:11 صبح
اگه درست فهمیده باشم شما میخاین زمان مانده از سشن رو در هر صفحه ای که در سایتتون که میخاین برین داشته باشین

برای افکت زیباتر شما میتونید زمان مانده که من بر حسب دقیقه در نظر می گیریم ( با جاوا اسکریپت یا فلش ) ترکیب کنید

1- نقطه شروع کار شما اینه که همین آلان زمان سشن شما شروع شده و Time Out اون رو 20 دقیقه در نظر می گیرید

پس در هنگام شروع سشن سشن جدیدی رو میسازیم به نام Start_Session و مقدار اون رو همین حالا به اضافه 20 دقیقه آینده میزاریم



Session.Add("Start_Session", DateTime.Now.AddMinutes(20).ToShortTimeString)




2- حالا در هر صفحه ای که مایل به بدست آوردن زمان مانده بر حسب دقیقه هستیم کافی




Dim a As DateTime = CType(Session("Start_Session"), DateTime).ToShortTimeString
Dim b As DateTime = Now.ToShortTimeString
Dim c AsInteger = (a - b).Minutes


Response.Write("Start Session Time " + a.ToShortTimeString)
Response.Write("<br>")
Response.Write("Now Time " + b.ToShortTimeString)
If c <= 0 Then
Response.Write("<br>")
Response.Write("Session Is Time Out !!!")
Else
Response.Write("<br>")
Response.Write(c.ToString + " Min To Time Out")
Response.Write("<br>")
EndIf



متغیر a زمان شروع سشن بر حسب DateTime
متغیر b زمان حال حاظر DateTime
متغیر c اختلاف بین این دو زمان بر حسب دقیقه از نوع Integer که در حقیقت زمان مانده از سشن است

امیدوارم منظور شما رو درست فهمیده باشم

اگه اساتید راه بهتری پیشنهاد میکنن خوشحال میشم

shahab_ksh
دوشنبه 23 اردیبهشت 1387, 00:19 صبح
این هم فایل عملی

Nasim_m
دوشنبه 23 اردیبهشت 1387, 14:34 عصر
خیلی ممنون
خیلی بدردم خورد اما نه توی اونجایی که لازم داشتم(یا من خوب جواب شما را نفهمیدم یا شما سوال منو)
فرض کن توی صفحه یک تایمر طراحی کردیم که بعد ازلود اولیه صفحه ساعت شروع می کنه به صورت معکوس شمردن و بعد از تمام شدن زمان هم کاربر رو به یک صفحه دیگه می فرسته
خوب حالا اگه در هنگام شمردن کاربر صفحه رو refreh کنه تایمر از اول شروع به کار می کنه
مشکل اصلی من اینجاست و تنها راه حلی هم که به ذهنم رسید رو توی پست اول گفتم
حالا نمی دونم جواب شما در این مورد کارایی داره یا نه
ولی با این همه بازم کلی ممنون:بوس::بوس::بوس:

shahab_ksh
دوشنبه 23 اردیبهشت 1387, 14:44 عصر
خوب حالا اگه در هنگام شمردن کاربر صفحه رو refreh کنه تایمر از اول شروع به کار می کنه


خوب اون مقدار متغیر c برای همینه که زمان باقیمانده از Session رو به شما میده شما باید مقدار اولیه برای شمردن به صورت معکوس رو برابر c قرار بدی که با هر بار پست شدن صفحه شمارنده از زمان باقی مانده شروع کنه

البته من فرض رو بر این گذاشتم که شما منظورتون اینه که زمان مانده از Session رو در تمام صفحات بدست بیارید




فرض کن توی صفحه یک تایمر طراحی کردیم که بعد ازلود اولیه صفحه ساعت شروع می کنه به صورت معکوس شمردن و بعد از تمام شدن زمان هم کاربر رو به یک صفحه دیگه می فرسته


اینجاشو باید جوا اسکریپت کنی