ورود

View Full Version : سوال: یافتن کاربر حاضر درون سایت (Really user onilne)



Ali_M.Eghbaldar
جمعه 01 مهر 1390, 17:57 عصر
با سلام خدمت دوستان حرفه ای و برنامه نویس :قلب:
در ابتدا باید بگ که برای رفع مشکلم یه 3 ساعتی تو نت چرخ زدم :لبخند: از سایت های خارجی گرفته تا داخلی برای نمونه :

سایت 1 (http://barnamenevis.org/showthread.php?29657-%D8%AA%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D9%81%D8%B1%D8%A7%D8%AF-%D8%A2%D9%86%D9%84%D8%A7%DB%8C%D9%86&highlight=%D8%A7%D9%81%D8%B1%D8%A7%D8%AF+%D8%A2%D9 %86%D9%84%D8%A7%DB%8C%D9%86)
سایت 2 (http://barnamenevis.org/showthread.php?211980-%D9%86%D8%AD%D9%88%D9%87-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%A2%D8%AF%D8%B1%D8%B3-http-mail.opi.yahoo.com-online-u-username-amp-m-a-amp-t-1&highlight=%D8%A7%D9%81%D8%B1%D8%A7%D8%AF+%D8%A2%D9 %86%D9%84%D8%A7%DB%8C%D9%86)
سایت 3 (http://barnamenevis.org/showthread.php?267831-%D8%A8%D8%AF%D8%B3%D8%AA-%D8%A2%D9%88%D8%B1%D8%AF%D9%86-%D8%AA%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D9%81%D8%B1%D8%A7%D8%AF-%D8%A2%D9%86%D9%84%D8%A7%DB%8C%D9%86&highlight=%D8%A7%D9%81%D8%B1%D8%A7%D8%AF+%D8%A2%D9 %86%D9%84%D8%A7%DB%8C%D9%86)
سایت 4 (http://barnamenevis.org/showthread.php?273695-%D8%A7%D9%81%D8%B1%D8%A7%D8%AF-%D8%A2%D9%86%D9%84%D8%A7%DB%8C%D9%86-%D8%B1%D8%A7-%DA%86%D8%B7%D9%88%D8%B1%DB%8C-%D9%85%D8%AD%D8%A7%D8%B3%D8%A8%D9%87-%DA%A9%D9%86%D9%85-%D8%9F&highlight=%D8%A7%D9%81%D8%B1%D8%A7%D8%AF+%D8%A2%D9 %86%D9%84%D8%A7%DB%8C%D9%86)
سایت 5 (http://stackoverflow.com/questions/2839329/asp-net-application-timeout)
سایت 6 (http://stackoverflow.com/questions/435538/how-to-configure-the-timeout-of-your-asp-net-web-application)

سوال :
بعد از ورود هر کاربر من فیلدی را در جدول مورد نظر True می کنم تا مشخصگر آنلان بودن آن فرد شود !!
حال اگر کاربر Sign-Out کند همان فیلد False می شود ولی اگر صفحه را بست چگونه آن فیلد False شود ؟؟؟؟؟؟؟؟؟؟؟؟؟؟
راه های مختلفی وجود دارد که یکی از آنها که همه به آن اشاره داشتند استفاده از روال Session_End است !! بله با این روال جواب می دهد ولی بس از گذشت TimeOut تعیین شده برای Session

<sessionState timeout="20"/>

حالا فرض کنید می خواهیم سیستم چت راهاندازی کنیم , آگر کاربر بعد از 20 دقیقه Offline شود یعنی 20 دقیقه سرکار گذاشتن افرادی که قصد چت با آن فرد را دشتند !!
یک راه حل مطرح می شود و آن کم کردن TimeOut Session است (مثلا 1 دقیقه) که جوابگو است ولـــــــــــــــــــــــ ــــــی منطقی چون کاربر اگر در این 1 دقیقه Request نداشته باشد session حذف می شود که در این صورت ضعف سیستم را می رساند ؟؟

چه یشنهاد می کنید ؟:اشتباه::متفکر:

dorparasti
جمعه 01 مهر 1390, 18:46 عصر
این مشکلیه که من هم باهاش روبرو هستم . جایی خوندم که نوشته بود سرور هیچ راهی برای تشخیص این که کاربر صفحه رو بسته ندارد . ایده ی خامی که الان به ذهنم رسید اینه که با استفاده از جاوا اسکریپت و کوکی شاید بشه راهی برای مطلع کردن سرور از بسته شدن صفحه ایجاد کرد . نیازش هم اینه که در فواصل معینی وجود کوکی توسط برنامه چک بشه . و در زمان بسته شدن صفحه با استفاده از جاوا اسکریپت کوکی رو حذف کنیم ..

یه همچین چیزی !؟ :متفکر:

Ali_M.Eghbaldar
جمعه 01 مهر 1390, 20:22 عصر
نه !! من فکر می کنم راه منطقی تری باید وجود داشته باشه :ناراحت:

محمد متاله
جمعه 01 مهر 1390, 21:25 عصر
با سلام
از آدرس های زیر می توانید کمک بگیرید

http://dotnetslackers.com/articles/aspnet/Tracking-User-Activity.aspx
http://www.viawindowslive.com/Articles/VirtualEarth/WhosOnline.aspx
http://www.codeproject.com/KB/aspnet/Online-Active-Users.aspx

البته اگر کاربری صفحات سایت را که در آن لاگین کرده ترک کند session مربوط به آن کاربر Expire می شود و رویداد Session_End رخ می دهد (Raise می شود) اگر می خواهید که فیلد مربوط به فعال بودن آن را False کنید در رویداد session_End در فایل Glopal.asax می تونید آن را False کنید. اگر این فایل در سایتتان وجود ندارد بر روی solution سایتتان کلیک راست کرده و پس از انتخاب گزینه Add New Item گزینه Global.asax را انتخاب کنید.

در هر صورت آدرس های بالا نیز راه حل های دیگری پیش راهتان قرار می دهد.

Ali_M.Eghbaldar
جمعه 01 مهر 1390, 21:58 عصر
دوست من از پاسخت ممنونم ولی مشکل من همینه دیگه وقتی Session_End اتفاق می افته که Timeout رخ بده و timeout بیست دقیقه بعد رخ میده که زمان خیلی زیاده ای :متعجب::ناراحت:

Ali_M.Eghbaldar
شنبه 02 مهر 1390, 13:52 عصر
دوستان کسی پیشنهادی نداره؟
کل کارم خوابیده :ناراحت:

asn2010
شنبه 02 مهر 1390, 18:11 عصر
چقدر جالب منم همین مشکلو دارم :قهقهه:
منم چنتا لینک برسی کردم

http://www.codeproject.com/KB/aspnet/Online-Active-Users.aspx
http://www.viawindowslive.com/Articles/VirtualEarth/WhosOnline.aspx

ولی نشـــــــــــــــــــــــ ــد :متفکر::اشتباه:

لطفا کمک کنید

TeacherMath
شنبه 02 مهر 1390, 21:16 عصر
اولا برای اینکه بتونید یک چت روم را اداره کنید باید در تعداد افرای که می توانند وارد هر روم بشن محدودیت بزارین مثلا هر روم 100 نفر.
بعد به هر کی که می خواد وارد چت روم بشه یه کد بدین و اون فرد را در روم ثبت کنید مثلا در یک دیتابیس یا هرجای دیگه مثل یه فایل ذخیره کنید بعد در سمت کلاینت هر 30 ثانیه یک بار کدی را از طریق ajax به سرور بفرستین.حالا باید توی سرور چک کنید هر کلاینتی که کدشو نفرستاد از اون روم خارج کنید.این فقط یه الگوریتمه اگه یه کتاب شبکه را بخوانید پر از این جور چیزاست.

par4parvaz
شنبه 02 مهر 1390, 21:17 عصر
از AJAX استفاده کن

مراحل زیر رو دنبال کن
1:
<asp:scriptmanager id="ScriptManager1" runat="server" enablepagemethods="true" />

2:
<body onunload="HandleClose()">
3:
<script language="javascript" type="text/javascript"> //<![CDATA[
function HandleClose() { alert("Killing the session on the server!!");
PageMethods.AbandonSession(); } //]]></script>

4:
که حالا میتونی از این تابع استفاده کنی
AbandonSession

به این صورت

public static void AbandonSession()
{
HttpContext.Current.Session.Abandon();
}

Ali_M.Eghbaldar
شنبه 02 مهر 1390, 21:42 عصر
سلام :بوس: واقعا امید وار شدم دمتون گرم که بالاخره جواب دادید :اشتباه:

دوست من TeacherMath (http://barnamenevis.org/member.php?150212-TeacherMath) موصوع بحث من یه چیزه دیگست

دوست من par4parvaz (http://barnamenevis.org/member.php?51180-par4parvaz) واقعا ایده جالبی بود ولی کار نمی کنه میشه زحمت بکشی یه مثال تست کرده خودت برام بزاری واقعا ممنون میشم

ولی یه مشکل دیگه هم وجود داره من این کد باید در تمام صفحات بزارم که کاره منطقی نیست :گریه:

TeacherMath
شنبه 02 مهر 1390, 21:47 عصر
موضوع بحث را فهمیدم این هم یه راهه .فقط باید روش کار بشه.

par4parvaz
شنبه 02 مهر 1390, 22:15 عصر
کار میکنه اما مشکل اینجاست که شما از یه صفحه به صفحه دیگه سایت که میری ، بازم این کد اجرا میشه

par4parvaz
شنبه 02 مهر 1390, 22:37 عصر
این لینک رو یه نیگاه بندازید
http://www.codeproject.com/KB/aspnet/Save_on_Close_of_Browser.aspx

Ali_M.Eghbaldar
شنبه 02 مهر 1390, 23:04 عصر
ممنون
ولی این لینکم مثل کد شما فقط برای اون صفحه کاربر داره ولی ممکنه کاربر از 10 تا صفحه دیگر سایت ببنده :افسرده: