PDA

View Full Version : باز هم کاربران آنلاین در سایت



nazaninam
سه شنبه 09 اسفند 1384, 22:06 عصر
سلام در این مورد من هم این تاپیکو دیدم
http://www.barnamenevis.org/forum/showthread.php?t=10678&highlight=online+user
هم این مقاله رو مطالعه کردم
http://www.stardeveloper.com/article...2102501&page=1

مقاله برام مبهم بود و بحث تاپیک هم بی نتیجه مونده بود آقای راد اگه میشه این بحث و یکم کامل کنید
پس از اینکه کاربر در سایت لوگین کرد نام کاربری اون در یک تیبل ذخیره میشه و در صفحه به عنوان کاربر آنلاین نمایش داده میشه
خوب حالا مشکلم اینجاست که وقتی کاربر بدون logout کردن صفحه رو میبنده چطور نام کاربریشو از داخل دیتابیس پاک کنم
حرفهای دوستان خیلی منو گیج کرده ممنون میشه واضح تر راهنماییم کنید

dot_net_lover2
چهارشنبه 10 اسفند 1384, 03:05 صبح
به نظر من اگر هنگام ساختن session بیای و expire time را تنظیم کنی به راحتی میتونی اونایی که از سایت بدون log out خارج شدن را تشخیص بدی و از table مورد نظرت حذف کنی.

javad3151
چهارشنبه 10 اسفند 1384, 08:15 صبح
درفایل global در سابروتین Session_End می تونید اینکار رو انجام بدید

Behrouz_Rad
چهارشنبه 10 اسفند 1384, 09:41 صبح
بهترین مکان برای ردیابی فعالیت های کاربر، روال Begin_Request موجود در فایل Global.asax است.
اطلاعات مربوط به کاربران آنلاین (همچون نام کاربری، شماره ی IP، تاریخ آخرین فعالیت و ...)، در یک دیتاست ذخیره خواهند شد.
در کنار استفاده از دیتاست، به منظور کاهش اعمال Round Trip به سرور، از Cache نیز استفاده می شود.
بدین شکل که با هندل کردن روال ذکر شده، Cache ایجاد شده را با یک دستور ساده ی Type Casting به دیتاست تبدیل خواهیم کرد و سپس، وضعیت کاربر مربوطه، آپدیت خواهد شد.
برای حذف کاربر از لیست کاربران آنلاین نیز، در آخرین Overload متدهای Add و Insert شی Cache، امکان فراخوانی Delegate ای فراهم شده (onRemoveCallback)، که در بازه های زمانی مشخصی، مثلا هر 5 دقیقه یک بار، کار مشخصی (همچون فراخوانی یک تابع) را انجام می دهد.
با ایجاد یک روال و فراخوانی آن در Delegate فوق، آیتم های موجود در Cache را که زمان آخرین فعالیتشان با زمان جاری، با میزان مورد نظر شما (مثلا 5 دقیقه) اختلاف دارد، از Cache حذف کنید.
روال فوق در زمان Signout کاربر نیز باید فراخوانی شود.
استفاده از شی XMLHTTP نیز خالی از لطف نیست!

والسلام علیکم.

موفق باشید.

nazaninam
پنج شنبه 11 اسفند 1384, 10:36 صبح
ممنون آقای راد
آقا جواد میشه بگید با session_end چی کار میشه کرد ؟؟؟؟!
یکم توضیح بدید

javad3151
شنبه 13 اسفند 1384, 09:22 صبح
سلام
با چند خط کدنویسی ساده میشه براحتی آمار کاربران آنلاین رو گرفت


Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
' Fires when the session is started
Dim cn As SqlConnection
Dim cmd As SqlCommand
cn = New SqlConnection(ConfigurationSettings.AppSettings.It em("constr"))
cn.Open()
cmd = New SqlCommand("Insert into useronline(userip) values(N'" & Session.SessionID.ToString & "')", cn)
cmd.ExecuteNonQuery()
cn.Close()
End Sub

Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
' Fires when the session ends
Dim cn As SqlConnection
Dim cmd As SqlCommand
cn = New SqlConnection(ConfigurationSettings.AppSettings.It em("constr"))
cn.Open()
Dim sql As String = "delete from useronline where userip=N'" & Session.SessionID.ToString & "'"
cmd = New SqlCommand(sql, cn)
cmd.ExecuteNonQuery()
cn.Close()
End Sub

رکوردهای موجود در جدول تعداد کاربران آنلاین شما هستند
ضمنا می تونید علاوه بر اینها مثلا نام کاربر یا آدرس IP یا... را هم در همین جدول ذخیره کرده و اسم کاربران آنلاین رو هم نشون بدید

hamed_bostan
شنبه 13 اسفند 1384, 18:02 عصر
با سلام . اوالا که اقا دمت گرم استفاده گردم . دوم اینکه من فقط سشن رو می فرسته توی دیتا بیس ولی وقتی اکسپلورر رو می بندم پاکش نمی کنه. آیا این به خاطر اینه که روی local دارم اجرا می کنم از طریق vs یا نه؟

nazaninam
شنبه 13 اسفند 1384, 21:52 عصر
بستن صفحه باعث fire شدن ساب روتین session end نمیشه ...

javad3151
یک شنبه 14 اسفند 1384, 08:21 صبح
در وب کانفیگ در گزینه timeout مشخص می کنه که اگر در طی این زمان درخواستی از کامپیوتر کاربر نیومد session رو پاک میکنه (و روال Session_End رو اجرا میکنه)


<sessionState mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="10"/>

بیشتر برنامه های تحت وب همینطور هستند مثلا اگر بدون sing out از یاهو مسنجر اینترنت رو قطع کنید, با اینکه شما از اینترنت خارج شدید دیگران شما رو تا چند دقیقه بعد آنلاین می بینند

rasti_web
سه شنبه 01 اسفند 1385, 09:59 صبح
سلام . من روش بالا را تست کردم.کاربران را درجدول میریزد.ولی هیچ کدام را حذف نمیکند؟در ضمن من میخواستم وضعیت کاربر را update کنم.ولی آن هم جواب نمیده؟و یک سوال دیگه من سی شارپ کار میکنم ولی این پارامتر N که در موقع Insert در کد است برای چیه؟(در سی شارپ برای جستجوی کلمات فارسی استفاده میشه.).لطفا من را راهنمایی کنید

pouriams
چهارشنبه 16 اسفند 1385, 14:58 عصر
در net 2005. C# کد زیر ساپورت نمی شه چه باید کرد؟ (اون قسمتی که قرمز رنگ است)
ConfigurationSettings.AppSettings.Item("constr")

MehranZand
چهارشنبه 16 اسفند 1385, 15:45 عصر
سلام . من روش بالا را تست کردم.کاربران را درجدول میریزد.ولی هیچ کدام را حذف نمیکند؟در ضمن من میخواستم وضعیت کاربر را update کنم.ولی آن هم جواب نمیده؟و یک سوال دیگه من سی شارپ کار میکنم ولی این پارامتر N که در موقع Insert در کد است برای چیه؟(در سی شارپ برای جستجوی کلمات فارسی استفاده میشه.).لطفا من را راهنمایی کنید

این پارامتر N اس کیو ال سرور را موظف میکنه که اطلاعات را بصورت یونیکد
در table ذخیره کند. معمولا برای دخیره سازی فارسی بکار میره و با دیتا تایپ هایی
که اولشون n داره بکاره میرود.

javad3151
چهارشنبه 16 اسفند 1385, 19:59 عصر
در net 2005. C# کد زیر ساپورت نمی شه چه باید کرد؟ (اون قسمتی که قرمز رنگ است)
ConfigurationSettings.AppSettings.Item("constr")

این کدبرای خوندن کانکشن استرینگ هستش و در 2005 ساپورت میشه ولی شکل جدیدش در 2005 به این صورته:


ConfigurationManager.ConnectionStrings("constr").ToString



فایل global.ascx وجود نداره
در 2005 این فایل بصورت خودکار وجود نداره و خودتون باید از add new item بصورت دستی اون رو ایجاد کنید تازه وقتی بصورت دستی ایجادش میکنید بعضی از ساب های اصلی مثل
Application_AuthenticateRequest رو نداره که اون ها رو هم خودتون(درصورت نیاز) باید اضافه کنید.

pouriams
یک شنبه 20 اسفند 1385, 15:43 عصر
سپاسگزارم دوست گرامی.
راستی دستور زیر هم کار نکرد:

ConfigurationManager.ConnectionStrings("constr").ToString

دستورات داخل session_end اجرا نمیشه. ممکنه اشکال در web.config باشد که timeout‌ برایش تعریف شده نیست؟ اگر نه پس فکر می کنید مشکل از کجاست؟

3lool
پنج شنبه 10 آبان 1386, 01:47 صبح
دستورات داخل session_end اجرا نمیشه. ممکنه اشکال در web.config باشد که timeout‌ برایش تعریف شده نیست؟ اگر نه پس فکر می کنید مشکل از کجاست؟