PDA

View Full Version : بدست آوردن لیست افراد آنلاین با session



morteza_mokhtari
پنج شنبه 28 دی 1391, 21:54 عصر
سلام دوستان بنده تویه سایتم به محض اینکه کاربر لاگین میکنه نام کاربری اون رو میذارم تویه یک session.حالا میخوام لیست افراد آنلاین رو تویه سایت نشون بدم یه فکری به نظرم رسید که به جای اینکه بخوام از یک جدول برای بدست آوردن لیست افراد آنلاین استفاده بکنم از خود همین session استفاده کنم میخواستم ببینم چه طوری میشه به تمام session های ایجاد شده تویه سرور دسترسی داشت که بتونم مقدار درونشون رو که همون نام کاربری هست رو بخونم و تویه سایت به عنوان لیست افراد آنلاین نشون بدم؟ آیا این کار شدنی هست؟

AmirGhasemi
جمعه 29 دی 1391, 23:17 عصر
سلام
من هم چند روزي است كه اين سوال را در فروم مطرح كرده ام اما كسي پاسخ نداده
در ضمن من مي خواهم كه مدير سايت بتونه اين افراد انلاين را هم اخراج كنه

morteza_mokhtari
شنبه 30 دی 1391, 00:01 صبح
سلام دوست عزیز بنده بی خیالش شدم و از cache استفاده کردم افرادی که لاگین میکنند رو میریزم تویه یک لیست و لیست رو قرار میدم تویه کش و بالعکس. بنده جملتون رو متوجه نشدم که مدیر سایت بتونه افراد آنلاین رو اخراج کنه یه کم توضیح بشتری بده که اگه بلد بودم کمکت کنم.

AmirGhasemi
شنبه 30 دی 1391, 00:13 صبح
سلام بر مرتضي عزيز دل ما
آقا ممنون
من هم از كش استفاده مي كنم فقط چطوري اين ليست را دوباره توي كش مي ريزي و مي خوني؟؟؟
در مورد اخراج هم منظورم اينه كه كش طرف 1اك شه به محض اينكه صفحه جديدي درخواست كرد دوباره صفحه لاگين بياد و مجبور شه لاگين كنه

fakhravari
شنبه 30 دی 1391, 02:07 صبح
سشن ایدی بگیرد و در یک جا ذخیره کنید و
موقع ورود کاربران سشن ایدی بگیرید و چک کنید
System.Data.DataTable dt = (System.Data.DataTable)System.Web.HttpContext.Curr ent.Cache["SesionList"];
for (int i = 0; i < dt.Rows.Count; i++)
{
if (System.Web.HttpContext.Current.Session.SessionID. ToString() == dt.Rows[i]["SessionID"].ToString())
{
dt.Rows[i]["SessionID"] = System.Web.HttpContext.Current.Session.SessionID.T oString();
dt.Rows[i]["UserID"] = UserID;
}

morteza_mokhtari
شنبه 30 دی 1391, 21:26 عصر
protected List<string> AuthenticatedUsersList
{
get
{
//If the Cache is empty, we add an empty List in it
if (Cache["AuthenticatedUsers"] == null)
Cache["AuthenticatedUsers"] = new List<string>();
return (List<string>)Cache["AuthenticatedUsers"];
}
set { Cache["AuthenticatedUsers"] = value; }
}

این قسمت رو بذار تویه صفحه لاگین
List<string> authenticatedUsers = AuthenticatedUsersList;

if (!authenticatedUsers.Contains(IsAuthenticated.Firs t().UserID))
{
//If the current user is not already in the authenticated users' list, we add him to the list
authenticatedUsers.Add(textbox_UserName.text);

//Then we save the authenticated users' list
AuthenticatedUsersList = authenticatedUsers;

}

این قسمت رو هم بذار تویه صفحه ای که میخواهی لیست افراد انلاین نشون داده بشه
if (authenticatedUsersList.Count > 0)
{
foreach (string user in authenticatedUsersList)
{
LtrONlineUser.Text += "<a href=\"/forums/showProfile/" + user + "\">" + user + "</a>, ";
}
}

AmirGhasemi
یک شنبه 01 بهمن 1391, 13:42 عصر
سلام عزيز من خودم لاگين دستي درست كرده ام و از لاگين دات نت استفاده نمي كنم
ايا باز هم جواب مي دهد اين روش شما؟

morteza_mokhtari
یک شنبه 01 بهمن 1391, 14:08 عصر
بله من هم خودم لاگین رو دستی نوشتم جواب میده.ببین فلسفه کد انجوری که کاربر وقتی لاگین میکنه اضافه میشه به لیست و لیست رو قرار میدیم تویه یک cache. کاربر بعدی که لاگین میکنه اطلاعات رو از cache میخونیم میریریم تویه لیست و نام کاربری رو به لیست اضافه میکنم و دوباره میذاریمش تویه cache. فقد یه نکته که وقتی که کاربر sign out میکنه باید از لیست اون رو کم کنی و همچنین این کار رو تویه session_End هم انجام بده.

website.expert
یک شنبه 01 بهمن 1391, 14:09 عصر
//in Global.asax file
protected void Application_Start(object sender, EventArgs e)
{
//Session Count is intialized with 0.
Application["SessionCount"] = 0;
}

protected void Session_Start(object sender, EventArgs e)
{
Application.Lock();

int countSession = (int)Application["SessionCount"];
Application["SessionCount"] = countSession + 1;

Application.UnLock();
}

protected void Session_End(object sender, EventArgs e)
{
Application.Lock();

int countSession = (int)Application["SessionCount"];
Application["SessionCount"] = countSession - 1;

Application.UnLock();
}

fakhravari
یک شنبه 01 بهمن 1391, 15:50 عصر
این دوستمون میخواهد لیست سشن داشته باشه نه تعداد آن ها
که بعد بشه آنو مدیریت کنه

saeed_sho
یک شنبه 01 بهمن 1391, 18:46 عصر
آمارتون واقعی نیست
اگه کاربر مرورگرو ببنده دوباره باز کنه یه سشن آی دی جدید میگیره

morteza_mokhtari
یک شنبه 01 بهمن 1391, 20:52 عصر
با سلام در مورد کد بنده اون قسمتی رو که گفتم بذارید تویه صفحه لاگین منظورم اینه که باید بذاریم برای رویداد کلیک دکمه لاگین.به محض اینکه کاربر لاگین میکنه به لیست اضافه میشه.

website.expert
دوشنبه 02 بهمن 1391, 16:11 عصر
این دوستمون میخواهد لیست سشن داشته باشه نه تعداد آن ها
که بعد بشه آنو مدیریت کنه

درسته حق با شماست.
من بد متوجه شده بودم.
عذر میخوام.

mRizvandi
دوشنبه 02 بهمن 1391, 18:27 عصر
وقتی می گی Session یعنی فقط در سطح Session اطلاعات وجود داره، وقتی از یک لایه بالاتر صحبت به میان بیاد باید بری سراغ Application اینطوری می تونی به کل دسترسی داشته باشی، البته مدیریتش به عهده خودت هست. (در هر حال باز نمی تونی به لیست همه sessionها دسترسی داشته باشی)
شما باید لیستی رو تهیه کنی و اون رو در سطح Application ذخیره کنی.
در Session_Start یا لاگین اضافه کن و در Session_End و لاگ اوت، کاربر مورد نظر رو کم کن.

AmirGhasemi
دوشنبه 02 بهمن 1391, 23:48 عصر
سلام دوباره بر همه دوستان
ممنون از وقتي كه همه گذاشتيد منتهي هنوز به جواب دقيقي ما دست پيدا نكرده ايم

saeed_sho
سه شنبه 03 بهمن 1391, 10:30 صبح
یه سلکت بزنید تعداد افرادی که تاریخ آخرین فعالیتشون از مدت اعتبار سشن که معمولا 20 دقیقه ست کمتر بود آنلاین هستند
اینکارو میتونید از جدول ممبرشیپ یا جدول لاگین خودتون انجام بدین با تایمر هر یک دقیقه یک بار

mRizvandi
سه شنبه 03 بهمن 1391, 11:16 صبح
اگه خیلی اصولی می خوای کار کنی:
یک کلاس بساز برای کاربران آنلاین
حداقل این فیلدها رو داشته باشه:
نام کاربر، زمان ورود، سطح دسترسی یا نقش و ...
یک لیست از این کلاس بگیر
هر بار که کاربری لاگین کرد، یک آبجکت از این کلاس بساز و به اون لیست اضافه کن، لیست رو هم در سطح Application ذخیره کن
هر بار که کاربری بیرون رفت یا sessionش بسته شد، کاربر رو از لیست کم کن