PDA

View Full Version : مشکل در محاسبه تعداد کاربران فعال



raha_hakhamanesh
جمعه 17 اسفند 1386, 09:01 صبح
با سلام

قطعه کد من در فایل Global.asax به شرح زیر است.




void Session_Start(object sender, EventArgs e)
{
Application.Lock();
Application["visitor"] = int.Parse(Application["visitor"].ToString()) + 1;
Application.UnLock();
}

void Session_End(object sender, EventArgs e)
{
Application.Lock();
Application["visitor"] = int.Parse(Application["visitor"].ToString()) - 1;
Application.UnLock();
}


اگر تعداد کاربران افزایش یابد شمارنده تعداد کاربران را به درستی انجام می دهد ولی اگر کاربران کم شوند شمارنده تعداد را کم نمی کند! به نظر شما علت چیه؟

Amir Taghavi
جمعه 17 اسفند 1386, 10:31 صبح
تو webconfig ببین تنظیمات sessionstate باید به شکل زیر باشه:


<Sessionstate mode="inproc" timeout="x"/>

raha_hakhamanesh
جمعه 17 اسفند 1386, 12:01 عصر
بخشی که شما فرمودید نبود و من اضافه کردم مقدار زمان رو هم 30 دقیقه گذاشتم ولی پس از بستم Browser توقع داشتم که شمارشگر کم شود ولی بازهم نشد!

منتظر راهنمایی های بعدی هستم

raravaice
جمعه 17 اسفند 1386, 12:09 عصر
بخشی که شما فرمودید نبود و من اضافه کردم مقدار زمان رو هم 30 دقیقه گذاشتم ولی پس از بستم Browser توقع داشتم که شمارشگر کم شود ولی بازهم نشد!
شما با این کارت دقیقا به برنامت گفتی که بعد از 30 دقیقه بلا استفاده بودن Session_End فراخوانی بشه.
پیش فرض این مدت زمان 20 دقیقه هست پس اگر هم شما تعریفی برای این موضوع نداشته باشی همون 20 دقیقه در نظر گرفته میشه.
همچنین پیشنهاد میدم که این زمان رو از این کمتر نکنی که جاهای دیگه برنامت به مشکل بر بخوری.

موفق باشید

raha_hakhamanesh
جمعه 17 اسفند 1386, 12:14 عصر
سلام دوست عزیز

بحث روی این موضوع نیست. حرف شما کاملا صحیحه و من هم به همین دلیل مقدار اون رو کمتر نذاشتم اما وقتی یک صفحه Browser بسته می شه باید رویداد Session_End فراخوانی بشه یا نه؟ اما به هر حال دستورات درون این رویداد اجرا نمی شوند. مشکل اینجاست.
حالا چیکار کنیم؟

raravaice
جمعه 17 اسفند 1386, 12:23 عصر
وقتی یک صفحه Browser بسته می شه باید رویداد Session_End فراخوانی بشه یا نه؟
نه چون سرور به کاینت وصل نیست که بخواد بفهمه مرورگر بسته شده.

شما توی رویداد onunload از تگ body توی html از توابع Ajax استفاده کن و بسته شدن مرورگر رو به سرور گزارش کن.
"این تئوری منه هنوز خودم ازش استفاده نکردم ولی احتمالا میشه"

موفق باشید

Aidin
جمعه 17 اسفند 1386, 12:41 عصر
به چه دلیل انتظار دارید وقتی مرورگر بسته میشه تعداد کاربران کم بشه ؟؟؟؟؟

رویداد Session_End در 2 زمان فراخوانی میشه :

1- فراخوانی متد Session.Abandon
2- اتمام زمان مشخص شده برای اعتبار Session

برای اینکه کاربران به روش صحیح از سایت خارج شوند باید دکمه Logout در سایت قرار دهید

( البته با استفاده از تایع کلاینت ساید UnLoad مرورگر و ترکیب آن با Ajax شاید بشه یه کارای کرد )

raha_hakhamanesh
جمعه 17 اسفند 1386, 12:48 عصر
این خیلی عجیبه
لطفا اگه روشی دیگر هست بفرمایید

raha_hakhamanesh
جمعه 17 اسفند 1386, 12:52 عصر
به چه دلیل انتظار دارید وقتی مرورگر بسته میشه تعداد کاربران کم بشه ؟؟؟؟؟

رویداد Session_End در 2 زمان فراخوانی میشه :

1- فراخوانی متد Session.Abandon
2- اتمام زمان مشخص شده برای اعتبار Session

برای اینکه کاربران به روش صحیح از سایت خارج شوند باید دکمه Logout در سایت قرار دهید

( البته با استفاده از تایع کلاینت ساید UnLoad مرورگر و ترکیب آن با Ajax شاید بشه یه کارای کرد )

پاسخ شما منطقیه متشکر
لطفا بفرمایید من می خوام تعداد مراجعه کنندگان آنلاین(بدون توجه به کاربر بودن یا یوزر معمولی) را داشته باشم . رویداد Session_start برای ثبت ورود این افراد کاملا صحیح است ولی برای اتمام بازدید این افراد چگونه باید عمل کنم؟
متشکر

raravaice
جمعه 17 اسفند 1386, 12:57 عصر
برادر رها
شما اونی رو که من گفتم انجام دادی نشد که دنبال راه دیگه ای هستی؟



شما توی رویداد onunload از تگ body توی html از توابع Ajax استفاده کن و بسته شدن مرورگر رو به سرور گزارش کن.
"این تئوری منه هنوز خودم ازش استفاده نکردم ولی احتمالا میشه"
'-----------------------------------------------------------


این خیلی عجیبه
فکر کنم اگر بشه تنها راهش اینه مگر اینکه معجزه بشه یا یه مبتکری بیاد یه راه دیگه بهت بگه که اون عجیبه نه این!

موفق باشید

Aidin
جمعه 17 اسفند 1386, 13:08 عصر
این خیلی عجیبه


چی ؟؟؟؟؟؟؟

raha_hakhamanesh
جمعه 17 اسفند 1386, 13:13 عصر
برادر رها
شما اونی رو که من گفتم انجام دادی نشد که دنبال راه دیگه ای هستی؟

'-----------------------------------------------------------
فکر کنم اگر بشه تنها راهش اینه مگر اینکه معجزه بشه یا یه مبتکری بیاد یه راه دیگه بهت بگه که اون عجیبه نه این!

موفق باشید

raravaice من از شما تشکر می کنم ولی اطلاعات اندک من میگه که بحث AJAX مربوط به این موضوع نیست(هر چند امکان پذیر است) و بررسی تعداد کاربران بوسیله سشن ها بصورت ساده تر امکان پذیر است . هم اکنون هم به دنبال راه حلش هستم و قطعا پاسخ بنده جسارت به شما و یا اطلاعات شما نبوده. بنابراین اجازه بدین تا بقیه دوستان که احتمالا در این زمینه کار کرده اند به من کمک کنم.
در انتها از شما متشکرم

Aidin
جمعه 17 اسفند 1386, 13:13 عصر
ببینید منطق Web به این شکل هستش :

اتصال - ارسال یا دریافت اطلاعات - قطع اتصال

شما نمیتونید همیشه به یک سرور متصل باشید تا هروقت این اتصال قطع شد ، به سرور گزارش داده بشه

اگر به پست های دوستان و من دقت میکردید چند روش پیشنهاد شد :

استفاده از دکمه Signout
کاهش زمان Session Timeou (چندان منطقی نیست)
استفاده از Ajax برای اعلام unload شدن صفحه

Behrouz_Rad
جمعه 17 اسفند 1386, 14:58 عصر
raha_hakhamanesh@
سیستم های آمارگیری کاربران آنلاین به این شکل نیستند که بلافاصله بعد از خروج کاربر از سایت اون رو از لیست کاربران آنلاین حذف کنن.
به عنوان مثال، سیستم VB که در این سایت استفاده میشه بعد از اینکه از سایت خارج شدی (بدون logout) نام کاربریت رو همچنان در لیست کاربران آنلاین نگه میداره تا مدت زمانی که واسش تعیین شده به اتمام برسه.
+ روشی که استفاده می کنی روشی قدیمی و منسوخ هست. در ASP.NET روش بهتری با استفاده از Cache وجود داره.

موفق باشید.

raha_hakhamanesh
جمعه 17 اسفند 1386, 15:05 عصر
روشی رو که به اون اشاره کردین در جستجوهام دیدم ولی احساس کردم روش سختی باشه ولی با توجه به سفارشی که فرمودین به سراغ اون می رم.

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