جواب اين سوال بستگي به اين داره كه از كدوم نسخه از asp.net استفاده كنيد.
در نسخه 2 امكاني پيش فرض براي اين موضوع وجود داره فقط بايستي اين امكان را در فايل web.config فعال كرده باشيد.
Membership.GetNumberOfUsersOnline();
و يكي ديگه از امكانات نسخه 2 masterPage ها هستند كه با استفاده از اين امكان و با كمي برنامهنويسي ميتوانيد تعداد كاربران در حال مشاهده هر صفحه را براساس IP و آخرين زمان مراجعه مشخص كنيد.
خط زير IP كاربر را برميگردونه
Request.UserHostAddress
در مورد اينكه Session_End فراخواني نميشه، به عنوان يك قانون كلي نميتوني روي اين رخداد حساب كني، اون هم به خاطره ماهيت پروتكل http كه بدون وضعيت (stateless) است. يعني اينكه اگر كاربر پنجره مرورگرش رو ببنده يا به يك صفحه ديگه بره اين رخداد اتفاق نمي افته. طبق تعريف پس از پايان زمان بقاي يك session بايستي رخداد پايان فراخواني بشه. (به طور پيش فرض 20 دقيقه كه در فايل web.config ميشه كم يا زيادش كرد).
من فكر كنم راههاي بهتري براي كاري كه قصد انجامش رو داري پيدا مي كني. (اگر راهه ديگهاي وجود نداره، اكثر مرورگرهاي جديد از ردخداد Unload پشتيباني ميكنن كه ميتوني با جاوااسكريپت كنترلش كني، اما توصيه نمي شه - تو لينك كد لازم وجود داره)
براي اطلاعات بيشتر به لينك زير مراجعه كنيد (كه البته حرف چندان بيشتري براي گفتن نداره):
http://p2p.wrox.com/topic.asp?TOPIC_ID=1774&SearchTerms=vadivel