PDA

View Full Version : تشخيص ورود و خروج از كل صفحات



غلامرضا شریفی
دوشنبه 07 تیر 1389, 19:47 عصر
براي تشخيص ورود و خروج از Global.asax ميتوان استفاده كرد حالا ميخواهم بدانم اين كاربري كه با اي پي خاص خودش سايت را در اين تاريخ و ساعت باز كرده است كي سايت را بسته است

aminghaderi
دوشنبه 07 تیر 1389, 21:45 عصر
ممنون می شم کدی که استفاده ی کنید رو اینجا بزارید تا بنده و دوستان هم استفاده کنیم.

درباره سوالتون ، من فکر می کنم شما بتونید با استفاده از اجکس این کار رو انجام بدید؟!
الگریتم کار:
در سمت کلاینت (قسمت دیزاین) یه کد اجکس بنویسید که هر 30 ثانیه یه مقدار ، مثلا 1 به عنوان اینکه کاربر کانکت هست رو به سرور (فایل اجکس) بفرسته و در فایل اجکس :
اولین مقدار ارسالی که رسید +30 ثانیه میشود زمان دریافت صفحه.
و مقدار های بعدی می شوند زمان خروج.
توضیح :
دو متغیر داریم ، StartTime و EndTime
صفحه دسته کاربر رسیده بعد 30 ثانیه تابع اجکس اجرا می شه ، و مقدار اولیه رو به سرور ارسال می کنه ، در سرور طی یه شرط برسسی می شه که آیا متغیر StartTime خالی هست؟؟ اگر این طور بود زمان سیستم + 30 ثانیه رو داخل متغیر قرار می دهد. (زمان شروع)
و اگر متغیر StartTime پور بود زمان +30 (اگر این کد رو برای کشف زمان خرابی بخوایم پس امکان داره بعد آخرین ارسال تابع اجکس از کلاینت به سرور بعد 25 ثانیه خرابی رخ بدهد و ما هم طبق الگریتم داریم 25 ثانیه پیش کاربر ازسایت خارج شده؟! پس به مشکل می خوریم ، برای این منظور ما +30 می کنیم تا در این صورت به مشکل نخوریم. ) و در EndTime ذخیره می کنیم .
در صورت تکرار ارسال هم مقدار متغیر به روز می شود.
و بعد مقدار شروع + مقدار پایانی + IP کاربر در DB ذخیره می شود.
ازتون هم ممنونم برای طرح سوالتون چون خیلی وقته می خواستم این الگریتم و در بیارم ولی یه جورایی تنبلیم می کرد و حالا این کار همین جا انجام شد.:چشمک:
برای قسمت اجکس هم شما باید از Ajax Core یا CallBack استفاده کنید.
موفق باشید.

aminghaderi
دوشنبه 07 تیر 1389, 22:19 عصر
البته این الگریتم یه مشکل بزرگ داره و اینکه اگر جاوا اسکریپت رو کاربر غیر فعال کنه ؟! دیگه کار نمی کنه؟!
البته اگر بشود قبل نمایش سایت مرور گر کاربر رو آنالیز کرد و در صورت غیر فعال بودن آن به کاربر پیامی نمایش داده بشود مبنی بر این که "برای نمایش این بخش باید جاوااسکریپت مرورگراتان را فعال کنید!" ، فکر می کنم این کار شدینی باشه؟!
توضیح :
کاربر سایت رو باز می کنه در رویداد page load صفحه مرورگر آنالیز می شه و اگر فعال بود یه متغیر به نام AllowAccess داخل سشن تعریف می شه و مقدار ان زمان فعلی سیستم قرار می گیره (یعنی جاوااسکریپت مرورگر کاربر در این لحضه فعاله؟! ) و سمت سرور هر 40 ثانیه چک شود که مقدار AllowAccess + 10 با زمان سیستم مساوی هست و در غیر این صورت کاربر رو پاس می دیم به صفحه اول برای ورد به سایت؟!
فقط مشکلی که باز پدید می یاد اینه "سمت سرور هر 40 ثانیه چک شود" ؟؟؟؟
که چطوری چک شود؟؟؟

غلامرضا شریفی
سه شنبه 08 تیر 1389, 11:09 صبح
دوست عزيز من مطالب بالا را چند بار خواندم من با اين تابعي كه معرفي كرديد آشنا نيستم و ساده تر بگويم هيچ نفهميدم

aminghaderi
چهارشنبه 09 تیر 1389, 00:44 صبح
دوست عزيز من مطالب بالا را چند بار خواندم من با اين تابعي كه معرفي كرديد آشنا نيستم و ساده تر بگويم هيچ نفهميدم :لبخند::لبخند: آخه چرا؟؟
ساده گفتم برادر ، بگید کجاش مبهم هست که توضیح بدم ؟! تازه این اولین تاپیکی بود که من کلی توضیح دادم.:کف:
شما برای استفاده از این الگریتم نیاز دارید با هسته اجکس کار کنید ، یعنی مستقیم با شی XmlHttpRequest کار کنید؟!
یه تاپیکی رو من باز کردم که اگه وقت منو ، امان بده انشاالله قراره تکمیل بشه ؟!:اشتباه: رو لینک می دم یه نگاهی بهش بندازید ، شاید یکم بتونه مسمر ثمر باشه.
http://barnamenevis.org/forum/showthread.php?t=222404
منبع فارسی راجبش زیاد نیست و لاتین هم چون خود دات نت ajax رو در کار هاش توسعه داده برای asp زیاد نیست ولی پیدا می شود.
--------------------------------------
از این ها گذشته الگریتم یه مشکل جدی داره و اون هم ما باید در سرور تابعی مثل تابع تایمر داشته باشیم که بتونه هر 30 ثانیه متغیر داخل سشن رو با ساعت سرور مقایسه کنه و تا اون نباشه برنامه از لحاظ امنیتی مشکل داره چون هر آن امکان داره کاربری که با مرور گر جاوااسکریپت فعال وارد شده ، جاوا اسکریپت و غیر فعال کنه و دست به خرابکاری بزنه و برنامه تصور کنه اون خیلی وقته از برنامه خارج شده؟!
این مشکل اگر حل شود بقیش قابل اجراست چون من شخصا نمونه این موارد رو کار کردم.
درضمن برادر کد GLOBAL رو نگذاشتی؟؟؟
کد رو بزارید شاید بشه اون کد رو توسعه بدیم؟!

غلامرضا شریفی
چهارشنبه 09 تیر 1389, 10:43 صبح
آخه چرا؟؟
مشكل سر بي سوادي است تاپيك معرفي شده را خواندم اول مشكلم نفهميدن بود حالا ....
ابتدا يك فايل Global.asax ميسازيم ودرون آن


Sub Application_Start(ByVal sender AsObject, ByVal e As EventArgs)
' Code that runs on application startup
Application("online") += 1
EndSub

Sub Application_End(ByVal sender AsObject, ByVal e As EventArgs)
' Code that runs on application shutdown
Application("online") -= 1
EndSub

قرار ميدهيم سپس در Page_Load توسط كد زير اضافه و يا كم شدن را مشاهده ميكنيم


NumberToPersian(Application("online"))