PDA

View Full Version : چطوری میشه وقتی کاربران open new tab page میکنه تعداد افراد چه عضو و چه مهمان اضافه نشه؟



saeed_sho
دوشنبه 12 تیر 1391, 11:24 صبح
سلام
چطوری میشه وقتی کاربران open new tab page میکنه تعداد افراد چه عضو و چه مهمان اضافه نشه؟

saeed_sho
دوشنبه 12 تیر 1391, 16:29 عصر
این مشک رو اینجوری حل کردم ابنها محتویات فایل global هستند در ضمن onlineUsersManager یه کلاس که خودم نوشتم و متد هاش هم شر شده هستند البته چیز خاصی توی آنها نیست و فقط فیلدهای جدول هامو آپدیت میکنند
Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
Dim context As HttpContext = HttpContext.Current

'کنترل میکند که رکورد روز جاری وجود دارد یا خیر در صورت عدم وجود آن را درج میکند
OnlineUsersManager.CheckTodayRowCreated()



'کنترل میشود که شخصی که سایت را درخواست میکند اگه بدون لاگ اوت کردن مرورگر خود را بسته باشد و دوباره به سایت بازگردد
' و مدت انقضای سشن او به اتمام نرسیده باشد به تعداد کاربران اضافه شود
If (context IsNot Nothing AndAlso context.User.Identity.IsAuthenticated) Then
'در سشن برای هر نام کاربری یک عدد میزاریم اگه در سشن برای کاربر مقداری نباشد یعنی باره اول است که کاربر وارد میشه
If (Session(context.User.Identity.Name) Is Nothing) Then
'مقدار عدد یک رو برای نام کاربری کاربر در نظر میگیریم
Session(context.User.Identity.Name) = 1

'این متد مقدار فیلد کاربران عضو را در جدول آمار یک واحد افزایش میدهد
OnlineUsersManager.IncreaseRegisterUsers()
' در شرط مشخص میشود که قبلا کاربر عدد دریافت کرده و تب جدیدی ایجاد میکند
Else
'و به ازای هر صفحه که در تب جدید باز بکند عدد مربوط به او یکی اضافه میشود
Session(context.User.Identity.Name) = CInt(Session(context.User.Identity.Name)) + 1
End If

ElseIf (context.Session.SessionID IsNot Nothing) Then
'این متد مقدار فیلد کاربران مهمان را در جذول آمار یک واحدافزایش میدهد
OnlineUsersManager.IncreaseGuests()
End If
End Sub

Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
Dim context As HttpContext = HttpContext.Current

'این شرط کنترل میکند که کاربر عضو است یا مهمان
'و در صورت عضو بودن یک واحد از اعضا کم میکند و در صورت مهمان بودن یک واحد از مهمان کم میشود
If (context IsNot Nothing AndAlso context.User.Identity.IsAuthenticated) Then
'بررسی میکند که عدد مربوط به کاربر اگر یک باشد بمعنی این است که کاربر در حال خروج از برنامه است
'در غیر اینصورت اگه از یک بزرگتر باشد بمعنی این است که کاربر تب جدیدی که باز کرده بود را میبندد
If (Session(context.User.Identity.Name) = 1) Then
'بمنظوره آزادسازی منابع سیستم مقدار ذخیره شده برای کاربر را برابر Nothing قرار میدهیم
Session(context.User.Identity.Name) = Nothing

'توسط این متد از تعداد اعضا یک واحد کم میشود
OnlineUsersManager.DecreaseRegisterUsers()
Else
Session(context.User.Identity.Name) = CInt(Session(context.User.Identity.Name)) - 1
End If

ElseIf (context.Session.SessionID IsNot Nothing) Then
'توسط این متد از تعداد مهمان یک واحد کم میشود
OnlineUsersManager.DecreaseGuestUsers()
End If

End Sub

Sub Session_Error(ByVal sender As Object, ByVal e As EventArgs)
Dim context As HttpContext = HttpContext.Current

'این شرط کنترل میکند که سشن به باطل شده مربوط به کاربر عضو است یا کاربر مهمان
If (context.User IsNot Nothing AndAlso context.User.Identity.IsAuthenticated) Then
'این شرط بررسی میکند که عدد مربوط به کاربر اگر یک باشد بمعنی این است که کاربر در حال خروج از برنامه است
'در غیر اینصورت اگه از یک بزرگتر باشد بمعنی این است که کاربر تب جدیدی که باز کرده بود را میبندد
If (Session(context.User.Identity.Name) = 1) Then
'بمنظوره آزادسازی منابع سیستم مقدار ذخیره شده برای کاربر را برابر Nothing قرار میدهیم
Session(context.User.Identity.Name) = Nothing

'توسط این متد از تعداد اعضا یک واحد کم میشود
OnlineUsersManager.DecreaseRegisterUsers()
Else
Session(context.User.Identity.Name) = CInt(Session(context.User.Identity.Name)) - 1
End If

'این متد مقدار فیلد کاربران عضو را در جدول آمار یک واحد کاهش میدهد
OnlineUsersManager.DecreaseRegisterUsers()
ElseIf (context.Session IsNot Nothing) Then
'این متد مقدار فیلد کاربران مهمان را در جدول آمار یک واحد کاهش میدهد
OnlineUsersManager.DecreaseGuestUsers()
End If
End Sub

saeed_sho
سه شنبه 13 تیر 1391, 09:38 صبح
سلام
وقتی من از Session.Abandon() استفاده میکنم رویداد Session_End اتفاق میافته
حالا سؤالم اینه بعد از اجرای Session_End اون Session(context.current.Identity.Name) که مقدارش رو کم میکنم کامل پاک میشه یا میتونه بمونه؟
اگه پاک میشه از چه جایگزینی بجاش استفاده کنم؟
Application چطوره؟