PDA

View Full Version : سوال: مشخص کردن کاربران انلاین و افلاین



mohsen.nsb44
دوشنبه 07 فروردین 1391, 23:28 عصر
سلام خدمت همه دوستان
یکی از دوستان کدی مبنی بر نمایش کاربران انلاین قرار داده بودن به شرح زیر

MembershipUser user = Membership.GetUser(TextBox1.Text.Trim());
chkOnlineNow.Checked = user.IsOnline;


اما متاسفانه این کد تمام کاربران افلاین و انلاین را به صورت انلاین نمایش میدهد
حال چند تا سوال
1 اینکه مشکل این کد چیه؟
2 بهترین راه برای نمایش کاربران انلاین چیست؟
اینم بگم که من از membership خود asp برای عضو گیری استفاده کردم

C#.net
سه شنبه 08 فروردین 1391, 00:13 صبح
مشکل اینجا هست که باید مدت نسبتا زیادی از آخرین فعالیت یوزر بگذره تا آفلاین محسوب بشه، می تونید این زمان رو از طریق وب کانفیگ کنترل کنید:
userIsOnlineTimeWindow



<membership defaultProvider="SqlProvider"
userIsOnlineTimeWindow="20">
<providers>
<add name="SqlProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="SqlServices"
enablePasswordRetrieval="true"
enablePasswordReset="false"
requiresQuestionAndAnswer="true"
passwordFormat="Encrypted"
applicationName="MyApplication" />
</providers>
</membership>

mohsen.nsb44
سه شنبه 08 فروردین 1391, 12:10 عصر
مشکل اینجا هست که باید مدت نسبتا زیادی از آخرین فعالیت یوزر بگذره تا آفلاین محسوب بشه، می تونید این زمان رو از طریق وب کانفیگ کنترل کنید:
userIsOnlineTimeWindow



<membership defaultProvider="SqlProvider"
userIsOnlineTimeWindow="20">
<providers>
<add name="SqlProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="SqlServices"
enablePasswordRetrieval="true"
enablePasswordReset="false"
requiresQuestionAndAnswer="true"
passwordFormat="Encrypted"
applicationName="MyApplication" />
</providers>
</membership>

دوست عزیز قسمت type="System.Web.Security.SqlMembershipProvider" رو ارور میده

C#.net
جمعه 11 فروردین 1391, 11:39 صبح
دوست عزیز قسمت type="System.Web.Security.SqlMembershipProvider" رو ارور میده
اون یه مثاله شما فقط همون پراپرتی userIsOnlineTimeWindow رو در تنظیمات خودتون ست کنید

mohsen.nsb44
جمعه 11 فروردین 1391, 11:41 صبح
اون یه مثاله شما فقط همون پراپرتی userIsOnlineTimeWindow رو در تنظیمات خودتون ست کنید
اوکی فقط userIsOnlineTimeWindow="20" عدد 20 بر اساس ثانیه هستش یا دقیقه؟

C#.net
جمعه 11 فروردین 1391, 12:02 عصر
اوکی فقط userIsOnlineTimeWindow="20" عدد 20 بر اساس ثانیه هستش یا دقیقه؟

بر اساس دقیقه هست

mohsen.nsb44
جمعه 11 فروردین 1391, 12:19 عصر
بر اساس دقیقه هست
اگه بخوایم بر اساس ثانیه انجام بشه چیکار باید کرد؟
چون اگه بر اساس دقیقه حساب بشه حد اقل 1 دقیقه اختلاف هستش

mohsen.nsb44
سه شنبه 15 فروردین 1391, 14:11 عصر
با کد بالا وقتی به پروفایل کاربر مراجعه شود مشخص میشود که انلاین هست یا افلاین البته با یک دقیقه اختلاف
حال برای اینکه تمام کاربران انلاین را در یک صفحه مشخص کنیم چه شرطی باید در استورپروسیجر گزاشته شود؟



select * from user where ????????????????????

dorparasti
سه شنبه 15 فروردین 1391, 20:20 عصر
در جدول aspnet_users یک فیلد هست به نام lastActivity که زمان آخرین فعالیت کاربر رو ذخیره می کنه . می تونید در query تون یک پارامتر از نوع dateTime داشته باشید و کاربرانی که زمان آخرین فعالیتشون بعد از اون تاریخ هستش برگردونید . مثلا می خواید کاربرانی که در یک دقیقه اخیر فعالیت داشتن به عنوان آنلاین در نظر بگیرید . موقع ارسال پارامتر از زمان جاری یک دقیقه کم کنید و بفرستید تا نتایح واکشی بشه .

به نظرم برای مرور صفحات توسط کاربر این فیلد بروز نشه ( مطمئن نیستم ) پس می تونید برای بهتر کردن دقت در صفحات اگر کاربر لاگین بود در رویداد load با استفاده از تابع GetUser() مقدار فیلد LastActivity کاربر رو بروز کنید .

mohsen.nsb44
دوشنبه 21 فروردین 1391, 23:06 عصر
ایا کسی پیشنهادی در این رابطه نداره؟
لطفا دیدگاهتون رو بیان کنید که بهترین راه برای انجام این عمل چیه

mohsen.nsb44
دوشنبه 21 فروردین 1391, 23:55 عصر
دوستان خودم راه حلی برای این موضوع پیدا کردم کدشو میزارم تا کسایی که خواستن استفاده بکنن
اول اینکه یک فیلد در بانکم به نام isOnline گرفتم که مقدار درستی یا نادرستی رو برمیگردون
بعد تو کد زیر رو نوشتم


if (User.Identity.IsAuthenticated)
{
Session.Add("Isonline", User.Identity.Name);
string Isonline = (string)Session["Isonline"];
SqlConnection con = new SqlConnection();
con.ConnectionString = System.Configuration.ConfigurationManager.Connecti onStrings["connectionstring"].ConnectionString;
SqlCommand cmd = new SqlCommand("online", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@UserName", Isonline);
cmd.Parameters.AddWithValue("@Isonline", "true");
con.Open();
cmd.ExecuteNonQuery();
con.Close();
GridView1.DataBind();

}
else if (!User.Identity.IsAuthenticated)
{
Session.Add("Isofline",!User.Identity.IsAuthenticated);
string Isonline = (string)Session["Isonline"];
SqlConnection con = new SqlConnection();
con.ConnectionString = System.Configuration.ConfigurationManager.Connecti onStrings["connectionstring"].ConnectionString;
SqlCommand cmd = new SqlCommand("online", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@UserName", online);
cmd.Parameters.AddWithValue("@Isonline", "false");
con.Open();
cmd.ExecuteNonQuery();
con.Close();
GridView1.DataBind();
}

mahan.2002
سه شنبه 22 فروردین 1391, 08:12 صبح
سلام
شما داخل StoredProcedure تون رو چی گرفتید...
فیلدتون ..

mohsen.nsb44
سه شنبه 22 فروردین 1391, 15:30 عصر
دوست عزیز اگه به کد ها خوب نگاه کنین متوجه میشین که داخل استورپروسیجر یک دستور اپدیت قرار داده شده که کاربرانی که انلاین میشوند مقدار Isonline را برابر مقدار درستی و کاربرانی که وارد که خارج میشوند مقدار Isonline را برابر نادرستی قرار میدهد
امیدوارم توضیحاتم کامل بوده باشه در صورتی که سوالی داشتین بپرسین بیشتر توضیح میدم

TeacherMath
چهارشنبه 23 فروردین 1391, 00:32 صبح
<asp:GridView ID="GridView1" runat="server" DataKeyNames="UserName"
AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="UserName" HeaderText="UserName" />
<asp:CheckBoxField DataField="IsOnline" HeaderText="IsOnline" />
</Columns>

</asp:GridView>



GridView1.DataSource = Membership.GetAllUsers();
GridView1.DataBind();

mahsa.n
چهارشنبه 23 فروردین 1391, 19:48 عصر
برای من درست کار نمیکنه
web.config


<membership userIsOnlineTimeWindow="20">
<providers>
<remove name="AspNetSqlMembershipProvider"/>
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer" applicationName="/" requiresUniqueEmail="true"/>
</providers>
</membership>


صفحه مشاهده پروفایل افراد


Guid UserId = new Guid(Request.QueryString["UserId"]);
string UserName = Membership.GetUser(UserId).UserName;
MembershipUser User = Membership.GetUser(UserName);
if (User.IsOnline)
lblOnline.Text = "آنلاین";
else
lblOnline.Text = "آفلاین";


چی کار کنم؟

mohsen.nsb44
یک شنبه 31 اردیبهشت 1391, 18:45 عصر
در جدول aspnet_users یک فیلد هست به نام lastActivity که زمان آخرین فعالیت کاربر رو ذخیره می کنه . می تونید در query تون یک پارامتر از نوع dateTime داشته باشید و کاربرانی که زمان آخرین فعالیتشون بعد از اون تاریخ هستش برگردونید . مثلا می خواید کاربرانی که در یک دقیقه اخیر فعالیت داشتن به عنوان آنلاین در نظر بگیرید . موقع ارسال پارامتر از زمان جاری یک دقیقه کم کنید و بفرستید تا نتایح واکشی بشه .

به نظرم برای مرور صفحات توسط کاربر این فیلد بروز نشه ( مطمئن نیستم ) پس می تونید برای بهتر کردن دقت در صفحات اگر کاربر لاگین بود در رویداد load با استفاده از تابع GetUser() مقدار فیلد LastActivity کاربر رو بروز کنید .
دوست عزیز میشه یه مثال بزارین