# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > ASP.NET Web Forms >  بهترین راه حل فهمیدن آنلاین و آفلاین بودن کاربر لاگین کرده ؟ چیست ؟

## tarsim

سلام دوستان من چندیدن راه رو دیدم که میشد فهمید کاربر الان آنلاینه یا آفلاینه اما همش زیاد جالب نبود. مطمئنم که یک راه حل خوب باید باشه.خب تا اینجا که من میدونم باید و قتی کاربر لاگین میکنه حالا توی بانک با هر جای دیگه یک فیلدی به عنوان 0 یا 1 یه هر چیز دیگری که نشان میده کاربر لاگین کرده ثبت شده خب تا ینجای کار مشکلی نیست و مثلا مقدار 1 ثبت میشه . ووقتی logout کرد مقدار 0 میشه. مشکل اینجاست شاید کاربر کل مرورگر با تبش رو ببنده که همه به نظر من بیشتر اینکار رو میکنن تا اینکه logout کنن من توی همین سایت برنامه نویس مطالب زیادی راجبش خوندم و لی فکر کینم راه حل قطعی نباشه مثلا کاربر وارد هر صفحه ای شده تاریخ ورودش ثبت شه و تخمین زده شه و ... . شما سایت ف ی س ب و ک رو ببینید خیلی از این سایت ها هستن تا کار بر آف میشه نهایت 5 ثانیه بعد نشوون داده میشه . حالا به نظر شما این چه الگوریتمی داره ؟ دوستان لطفا اگر کسی نظری داره و تکراری نیست کمک کنه .مرسی

----------


## fakhravari

میتوانید زمان ورود کاربر نام کاربری اونو درون یک لیست قرار دهید.
و در سشن یا کش بزارید.

----------


## tarsim

تشکر از جواب شما اما این راه هم خوب زیاد دقیق نیست . من چون با این روش من باید یه تایمی به سیشن بدم خب فکر نمیکنم راه حل اساسی باشه . مشکل اساسی انجاست از کجا باید فهمید کاربر مرورگرش یا تبش رو بسته ؟آیا این روش شما میتونه خوب باشه ؟

----------


## saeed31641

درست دوست عزیز راه حل اقای فخروی مناسب نیستند منم شدیدا دنبال چنین راه حلی البته برای اینکه هر کاربر یه با یوزر و پسوردش لوگین بشه

----------


## tarsim

سلام دوست عزیز به احتمال زیاد روش های بهتری هم هست من از دوستان خواهش میکنم نظرات خودشون رو بیان بازگو کنن تا با همفکری هم بهترین رو استفاده کنیم.

----------


## omid yeganeh

با سلام
اول یه فیلد توی دیتابیس میسازی مثلا status و Type این فیلد رو bit میذاری که فقط True , False میگیره که True یعنی کاربر آنلاینه و False یعنی کاربر آفلاینه
حالا به پروژت یه Global.asax اضاف میکنی و توی  Session_End  باید بگی که وقتی کاربر لاگین کرد مقدار False رو به True تغییر بده این یعنی کاربر انلاینه
و بهد میای توی Web.config و بین دو تگ <system.web> این کد رو اضافه میکنی <sessionState timeout="1" cookieless="AutoDetect"/> حالا میتونی timeout رو هر زمانی خواستی بذاری در حال حاضر اگه کاربر پس از لاگین کردم مرورگر رو ببنده به از 1 دقیقه True به false تبدیل میشه و کاربر افلاین میشه

اینو تست کن ببین چطوره اگر هم راه بهتری پیدا کردی منم در جریان قرار بده ممنون

موفق باشی داداش

----------


## CsharpNevisi

خب ببین ما دوتا معقوله اینجا داریم .. !!!
یک این که کاربر خارج شه و بعد از رفرش شدنصفحه چراغش خاموش شه ....
دوم این که بعد از خروج همون لحضه بدون پست بک و رفرش شدن چراغش خاموش شه.. !!
برای راه کار اول همون دیتابیس خوبه و میتونه کارتو راه بنداز
از این کد استفاده کن ... !!!
ین کدهای اچ.تی.ام.الت میشه :

<%@ Page Language="C#‎" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication2.WebForm1" %>


<!DOCTYPE html>


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body runat="server" id="Bodyy" onunload="Bodyy_Unload">
    <form id="form1" runat="server">
    <div>
    
    </div>
    </form>
</body>
</html>

اینم کدهای C#‎ و بیهایند کدت میشه :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;


namespace WebApplication2
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {


        }


        protected void Bodyy_Unload(object sender, EventArgs e)
        {
            // اینجا کدهاتو اضافه کن
            System.IO.File.WriteAllText(Server.MapPath(".") + "/mohsen fathi.txt", "Unload");
            // اینجا کدهاتو اضافه کن
            //********************************************* تو این رویداد میتونی بانکتو به روز کنی
        }
    }
}
برای کار دوم تو باید پیغام لحضه ای برای اپدیت بفرستی که با اسفاده از signalr این امکان هست ... !!!!
یه معقوله ایه برای خودش ... !!!
سوالی بود در خدمتم .. !!!

----------


## AmirGhasemi

سلام
معمولا بهترين روشي كه توصيه ميشه روش اميدآقاي يگانه است كه در بالا اشاره كرد
اما اگر مي‌خواهي لحظه اي متوجه آفلاين شدن بشي با عر معذرت روش دوست عزيزمون محسن آقاي فتحي خيلي جالب نيست
براي دريافت لحظه‌اي در ادامه كدهاي آقاي اميد يگانه مي‌توانيد از SignalR استفاده كنيد كه با جاوااسيكريپ اعلام مي كنه

----------


## CsharpNevisi

> اما اگر مي‌خواهي لحظه اي متوجه آفلاين شدن بشي با عر معذرت روش دوست عزيزمون محسن آقاي فتحي خيلي جالب نيست


من خواستم کدیو کامل کنم کهtarsim  خودش نوشته بود .. !!!
برای لحضه ای که من به عنوان روش دوم مطرح کردم مسلما بانک چیز خوبی نیست .. !!!
همچین کاراییو میشه خیلی خیلی راحت تر با جی کوئری اناج م داد تا asp ... درست مثل کاری که خودم تو پشتیبانی انلاین سایتم که که تماما جی کوئری هستش انجام دادم

----------

