PDA

View Full Version : چطوری میشه فهمید کاربر مرورگر خود را بسته؟ برای محاسبه تعداد کاربران آنلاین ...فوری



saeed_sho
یک شنبه 11 تیر 1391, 13:15 عصر
سلام
چطوری میشه فهمید که کاربر مرورگر خود را بسته؟
من دارم تعداد کاربران آنلاین رو حساب میکنم نمیخوام کاربر وقتی مرورگر رو میبنده وایسم تا سشن باطل بشه تا آمار آپدیت بشه میخوام همون لحظه که مرورگر بسته شد آمار آپدیت بشه
توی سایت دیدم که چندنفر میگن باید از جاوا اسکریپت استفاده کنم و متد unload فرم
حالا آیا باید توی متد unload همه ی فرم هام کد بزارم؟
رویدادی هست که موقع بسته شدن مرورگر در سطح اپلیکیشن اجرا بشه؟
کارم خیلی گیره فقط یک روز فرصت دارم لطفا راهنمایی کنید

sanay_esh
یک شنبه 11 تیر 1391, 15:04 عصر
با سلام
شما میتوانید با اضافه کردن Global Application Class به پروژه خودتون تمامی کاربرانی را که در داخل سایت هستند را مدیریت کنید
و از تکنولوژی ajax برای اینکه بصورت لحظه ای داشته باشید استفاده کنید

saeed_sho
یک شنبه 11 تیر 1391, 15:18 عصر
سلام
ممنون از توجهتون
فایل global رو دارم واز متدهای سشن استارت و سشن اند هم استفاده کردم اما نمیخوام کاربر مرورگر خودش رو که بست 20 دقیقه بعد کدهای سشن end اجرا بشه میخوام همون لحظه باشه آیا باید از جاوا اسکریپت استفاده کنم؟

saeed_sho
یک شنبه 11 تیر 1391, 20:26 عصر
خوب یکی بگه با ای جکس چطوری این کار انجام میشه ؟ یا جاوا اسکریپت؟
میخوام با جاوا اسکریپت بفهمم کی مرورگر رو میبنده و کجا کد رو بزنم توی همه فرم هام؟

hamed2592
یک شنبه 11 تیر 1391, 21:16 عصر
سلام

اگه از global خوشت نمیاد میتونی به این موضوع هم فکر کنی :

یه فیلد به کاربرت اختصاص بده به عنوان آخرین حضورش تو سایت .

با AJAX ( به خاطر refresh نشدن صفحه ) هر چند لحظه 1 بار تاریخ جدید رو Update کن تو فیلدش !

حالا تو میتونی کاربرهای آنلاین رو شناسایی کنی .

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

saeed_sho
دوشنبه 12 تیر 1391, 08:34 صبح
اگه تاریخ رو ذخیره کردیم باید وایسیم تا سشن باطل بشه که پیش فرض 20 دقیقه هستش یعنی اگه 20 دقیقه از آخرین حضورش گذشت بیایم و یک واحد از آمار کم کنیم خب مشکل من اینه که در global دارم این 20 دقیقه رو صبر میکنم من میخوام 20 دقیقه صبر نکنم و تا مرورگر رو کاربر میبنده بفهمم و کم کنم واسه این پیشنهادی نداری؟
ممنون از توجهت

saeed_sho
دوشنبه 12 تیر 1391, 11:50 صبح
من اگه کدی رو که تعداد کاربرها رو کم میکنه در رویداد page_unload یوزر کنترل بزارم و یوزر کنترل رو بزارم روی فرم اونوقت درست میشه؟

hamed2592
دوشنبه 12 تیر 1391, 12:44 عصر
حاجی اصلا کاری به Global نداریم .

تو userControl یه کد بنویس که هر 30 ثانیه فیلد تاریخ حضور کاربرت رو Update کنه !

حله !!!

حالا هر کجا که نیاز داشتی افراد آنلاینت رو ببینی Select بزن . چیکار داری به 20 دقیقش !!!

saeed_sho
دوشنبه 12 تیر 1391, 13:01 عصر
هر 30 ثانیه آپدیت کنیم سربار تحمیل نمیشه؟ برنامه کند نمیشه؟

saeed_sho
دوشنبه 12 تیر 1391, 16:06 عصر
برای حل این مشکل من از کدهای جاوا اسکریپت استفاده کردم توضیح میدم تا دوستانی که مشکل دارن مشکلشون حل بشه
پیشنهاد من اینه که از مستر پیج استفاده بکنید تا به همه صفحاتتون اعمال بشه
روی مسترپیج یک scriptManager بزارید اینجوری
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods ="true">
</asp:ScriptManager>
همیشه با تگ های سایت مشکل دارم شرمنده
تگ body صفحتون رو اینجوری تغییر بدید
<body onunload ="BrowserClose()">
و اینم به قسمت html اضافه کنید
<script language ="javascript" type ="text/javascript">
function BrowseClose()
{
PageMethods.KillSession();
}
</script>
و در codeBehind فرمتون این متد رو اضافه کنید
<System.Web.Services.WebMethod()>
Public Shared Sub KillSession()
HttpContext.Current.Session.Abandon()
End Sub
خوب حالا میتونید در global و رویداد session_end هر کدی خواستید بزارید

aminghaderi
دوشنبه 12 تیر 1391, 22:01 عصر
برای حل این مشکل من از کدهای جاوا اسکریپت استفاده کردم توضیح میدم تا دوستانی که مشکل دارن مشکلشون حل بشهدقیقا ، راه حل منطقی این هست ، در روش دوستمون ، نمی گم شدنی نیست ؟! بلکه شدنی هست ولی فشار زیادی رو سرور باید تحمل کنه ، هر 30 ثانیه باید یه گره به سرور وصل شه تا عملیات response / request رو صورت بده؟! (حالا از فرامین و هزینه اتصال گره ها در هر بار به سرور ، فاکتور می گیریم! ) و این اصلا بهینه نیست ؟!