PDA

View Full Version : FormsAuthentication و AjaxTimer



hamedgh
سه شنبه 20 آذر 1386, 09:09 صبح
سلام به همه دوستان
من در سایتم یک تایمر بااستفاده از اجاکس استفاده می کنم که 3 ثانیه یک بار یک درخواست به
صفحه می فرستد حالا مشکل اینجاست چون از Authentication استفاده می کنم هربار که تایمر
تیکس می زند سایت یک کانکش به دیتا بیس می زند این از نظر شما اشکالی ندارد به نظر شما منطقی است!!!
فرض کنید 1000 نفر در سایت باشند ان وقت در هر ثانیه حد اقل 333 کانکشن می زند
به نظر شما من چکار کنم هر دوی ان را نیاز دارم
اگر پیشنهاد بهتری دارید لطفا مرا راهنمایی کنید
لطفا کمک کنید

Behrouz_Rad
سه شنبه 20 آذر 1386, 11:18 صبح
چرا هر 3 ثانیه به سرور درخواست می فرستی؟

hamedgh
سه شنبه 20 آذر 1386, 12:23 عصر
چرا هر 3 ثانیه به سرور درخواست می فرستی؟

این یک آزمون الکترونیکی است باید ساعت در سمت سرور کنترل شود و هم خود دانشجو
هر 3 ثانیه یک بار یک درخواست می فرستد حالا به فرض این را زیاد کنیم 10 ثانیه
باز هم زیاد فرق نمی کند

اگر راهی بهتر برای تایمر سراغ دارین که من سراغ این تایمر اجاکسی نروم یا
یا روش استفاده بهتر

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

من خودم نظرم این بود که تایمر زمان را از دیتا بیس بخوانم بایک تایمر جاوای زمان را کم کنم
بعد با تایمر اجاکسی هر چند دقیقه زمان را در دیتا بیس ست کنم ولی نتوانستم پیاده سازی کنم
ایده نظر پیشنهاد
لطفا مشکل من را حل کنید

hamedgh
سه شنبه 20 آذر 1386, 13:10 عصر
یک سوال دیگر ی هم داشتم
اینکه اگر درخواستی از صفحه بیاید و طرف تایم اوت شده باشد
به طور اتوماتیک باید دوباره لوگین کند

ولی من می خواهم این رویداد را کنترل کنم یعنی اگر همچین اتفاقی افتاده خودم کدش را بنوسیم

اگر رویدادش هم بفرمایید خودم overridesh می کنم

Behrouz_Rad
سه شنبه 20 آذر 1386, 17:44 عصر
من قبلا یک آزمون جامع الکترونیکی رو طراحی کردم.
سوالات و گزینه های مرتبط با اونها رو در یک فایل XML قرار بده. اگر از NET 3.5. و LINQ to XML استفاده کنی، چون LtX از پایین ترین سطح XmlReader استفاده می کنه، سرعت کار افزایش پیدا می کنه.
زمان شروع رو در ViewState ذخیره کن.
در هر مرحله از PostBack، زمان جاری رو از زمان شروع کم کن و اگر زمان به دست آمده بیشتر از زمان مورد نظرت بود و سوالات تمام نشده بود متوجه میشی که کاربر Game Over شده و می تونی اون رو به صفحه ی مورد نظرت Redirect کنی.

موفق باشید.

hamedgh
سه شنبه 20 آذر 1386, 20:36 عصر
فعلا نمی توانم از دات نت 3.5 استفاده کنم چون هنوز سرورش ان را ساپورت نمی کند


در هر مرحله از PostBack، زمان جاری رو از زمان شروع کم کن و اگر زمان به دست آمده بیشتر از زمان مورد نظرت بود و سوالات تمام نشده بود متوجه میشی که کاربر Game Over شده و می تونی اون رو به صفحه ی مورد نظرت Redirect کنی.

صفحه من همه سواالات را در یک صفحه می ریزد و برای هر سوال یک کلیک دخیره گذاشتم
که در اپدیت پل است و برای ذخیره جواب اصلا صفحه postback نمی شود
ولی پیشنهاد جالبی است رویش کار می کنم همین طوری پیاده سازی اش کنم

در مورد سوال دومم
من می خواهم اگر تایم اوت شد چون در هر درخواست به صفحه چک می کند
انرا اول خودم چک کنم اگر تایم اوت شده همان جا دوباره لوگینش کنم چون از formsauthentication
استفاده می کنم می خواهم کنترلی در این زمینه داشته باشم ولی رویداد ان را پیدا نمی کنم که Handelash کنم

Behrouz_Rad
چهارشنبه 21 آذر 1386, 12:39 عصر
در مورد اینترفیس و روال کارت اطلاعی ندارم اما کنترل زمان رو می تونی در سمت کلاینت هم انجام بدی.
در یک آزمون الکترونیکی نباید زمان رو با ارتباط مستمر با سرور چک کنی چون اگر ارتباط کاربر قطع بشه و یا از اینترنت نفتی استفاده کنه برنامه به هم می ریزه.
مقدار زمان رو در اولین مرتبه از سرور بازیابی کن و با جاوا اسکریپ میزان زمان باقی مانده رو در هر لحظه برای کاربر نمایش بده.
اگر زمان کاربر به پایان رسید، می تونی با document.location.href، کاربر رو به صفحه ی مورد نظرت منتقل کنی.

موفق باشید.

mehrdad201
چهارشنبه 21 آذر 1386, 14:53 عصر
اونوقت امکان اینکه تقلبی صورت بگیره نیست ؟؟

مثلا کلاینت کاری کنه که تایمش زیاد بشه!!!

Behrouz_Rad
چهارشنبه 21 آذر 1386, 16:22 عصر
شما که نباید تنها به سمت کلاینت بسنده کنی.
بدیهیه که کدهای کلاینت به راحتی قابل حذف شدن و دستکاری هستند.
زمان شروع رو در ViewState ذخیره کنید تا کاربر نتونه اون رو تغییر بده.

موفق باشید.

hamedgh
پنج شنبه 22 آذر 1386, 12:48 عصر
ممنون دارم رویش کار می کنم

hamedgh
جمعه 23 آذر 1386, 15:53 عصر
بنا بر اشکار شدن مشکلات تایمر اجاکس که خیلی بی جنبه است می خواهد
به ازای هر تیکی یک کانکشن بزند و توصیه مهندس راد
بر ان شدم تا تایمر کلاینتی بنویسم
ولی مشکلی پیش امد من در داخل یوزر کنترل تمام کنترل هام را قرار دادم
وتابع جاوا اسکریپت در فرم والد است
مشکل اصلی من از مقدار نگرفتن از viewState
است چون در داخل یوزر کنترل مقدار دهی می شود
نمی دانم چکار کنم شاید مشکل از نتوانستن در مقدار دهی به تکست باکس است
بالاخره در عمل کاری انجام نمی دهد



var limit='<%# ViewState["Time"].ToString() %>';
document.getElementById('TimeN').value=limit;
var parselimit= limit.split(":");
parselimit=parselimit[0]*60+parselimit[1]*1;
var Id = 0
function begintimer()
{
var curmin = 0
var curtime = 0
if (parselimit == 1)
{
window.document.sw.submit();
return
// window.location = "";
}
else
{
parselimit -= 1
curmin=Math.floor(parselimit/60)
cursec = parselimit - (curmin*60)
if (curmin != 0)
curtime = curmin + " minutes and " + (1*cursec) + " seconds left"
else
{
curtime=cursec + " seconds left"
if(Id == 0)
{
Id=1
}
else
{
Id=0
}
}
window.status = curtime
document.getElementById('TimeN').value=curtime;
setTimeout("begintimer()", 1000)

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



window.onbeforeunload = function()
{
var e= document.getElementById('btn');
if (e)
e.click();
}

در کلیک باتن هم کانکشی در دیتا بیس می زنم

دوستان ما را فراموش نکنید

hamedgh
جمعه 23 آذر 1386, 21:35 عصر
مشکل اصلی از عدم مقدار دهی از viewstate است اگر راه حلی دارید لطفا دریغ نفمرایید

var limit='<%# ViewState["Time"].ToString() %>';

Behrouz_Rad
جمعه 23 آذر 1386, 22:45 عصر
مقدار ViewState ای که در User Control مقدار دهی می کنی رو به صورت یک Property تعریف کن و نام Property رو در فرم پدر صدا بزن.

موفق باشید.

hamedgh
شنبه 24 آذر 1386, 11:24 صبح
سلام خیلی ممنون از یک hidden استفاده کردم مشکل حل شد !!!!
الان داره مثل باقلوا کار می کنه:لبخند: