PDA

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



mp2009
یک شنبه 03 شهریور 1387, 23:11 عصر
با سلام
من یه مشکبل با نمایش کاربران انلاین داشتم.
من دارم یه امارگیری جامع و کامل مینویسم. ولی به چند تا مشکل برخوردم.
اول این کد رو ببینید.


Penhani.DAL Dal = new Penhani.DAL();

System.Data.SqlClient.SqlConnection myConnection = new System.Data.SqlClient.SqlConnection(Dal._Connectio nString);
System.Data.SqlClient.SqlCommand myCommand = new System.Data.SqlClient.SqlCommand("sp_AddOnlineUser", myConnection);
myCommand.CommandType = System.Data.CommandType.StoredProcedure;
myCommand.Parameters.Add("@IP_Address", Request.ServerVariables["REMOTE_ADDR"]);
myCommand.Parameters.Add("@Session_ID", Session.SessionID.ToString());
myCommand.Parameters.Add("@UserName", User.Identity.Name.ToString());
myCommand.Parameters.Add("@Role", Session["UserRole"].ToString());





try
{
myConnection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();
}

catch (Exception Err)
{

}



این کد را در روال Session_Start نوشتم.
حالا داره به myCommand.Parameters.Add("@Role", Session["UserRole"].ToString()); گیر میده


میگه که سشن ساخته نشده.
من میخواهم موقعی که کاربر لوگین کرد این سشن ها رو بسازم . اما قبل از اینکه سایت باز بشه باید این سشن وجود داشته باشه.
لطفا اگه کسی راهی چیزی به ذهنش میرسه کمک کنه.
با تشکر

mostafa_sgh
یک شنبه 03 شهریور 1387, 23:19 عصر
سلام دوست عزیز

توی Session_Start این شرط رو قبلش بزار خوب :


if (Context.User.Identify.IsAuthenticated)
{
// Add User Info To Database
}


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

mp2009
یک شنبه 03 شهریور 1387, 23:28 عصر
مرسی از جوابت.
اما بازم از همون خط ایراد میگیره.
کد رو اینجوری کردم.


void Session_Start(object sender, EventArgs e)
{
if (Context.User.Identity.IsAuthenticated)
{
// Add User Info To Database

Penhani.DAL Dal = new Penhani.DAL();

System.Data.SqlClient.SqlConnection myConnection = new System.Data.SqlClient.SqlConnection(Dal._Connectio nString);
System.Data.SqlClient.SqlCommand myCommand = new System.Data.SqlClient.SqlCommand("sp_AddOnlineUser", myConnection);
myCommand.CommandType = System.Data.CommandType.StoredProcedure;
myCommand.Parameters.Add("@IP_Address", Request.ServerVariables["REMOTE_ADDR"]);
myCommand.Parameters.Add("@Session_ID", Session.SessionID.ToString());
myCommand.Parameters.Add("@UserName", User.Identity.Name.ToString());
myCommand.Parameters.Add("@Role", Session["UserRole"].ToString());




try
{
myConnection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();
}

catch (Exception Err)
{
// do nothing but we really don't want to throw an
// exception here because that would likely crash the whole app
}

}
}


این خطا رو میده :
Object reference not set to an instance of an object.

mp2009
دوشنبه 04 شهریور 1387, 00:21 صبح
دوستان من خطا ها رو گرفتم.
این کد صفحه login است


Users UserrSystem = new Users();
if (UserrSystem.UserLogin(txt_UserName.Text, txt_Password.Text) != "No_User_Exist")
{
Session["UserName"] = txt_UserName.Text;
Session["Role"] = "Users";
Response.Redirect("../../Default.aspx");

}
else
{

Response.Write("javascript://this.windows.alert('ورود غیر مجاز میباشد.</br>دوباره تلاش کنید')");
}
اینم کد global.asax


void Session_Start(object sender, EventArgs e)
{
if (Session["UserName"] != null)
{
// Add User Info To Database

Penhani.DAL Dal = new Penhani.DAL();
System.Data.SqlClient.SqlConnection myConnection = new System.Data.SqlClient.SqlConnection(Dal._Connectio nString);
System.Data.SqlClient.SqlCommand myCommand = new System.Data.SqlClient.SqlCommand("sp_AddOnlineUser", myConnection);
myCommand.CommandType = System.Data.CommandType.StoredProcedure;
myCommand.Parameters.Add("@IP_Address", Request.ServerVariables["REMOTE_ADDR"]);
myCommand.Parameters.Add("@Session_ID", Session.SessionID.ToString());
myCommand.Parameters.Add("@UserName", Session["UserName"].ToString());
myCommand.Parameters.Add("@Role", Session["Role"].ToString());

myConnection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();



}
}
هیچ خطایی نیمیده اما هیچ کاربری هم در جدول userOnline ثبت نمیکنه

mostafa_sgh
دوشنبه 04 شهریور 1387, 00:22 صبح
دوست عزیز

شما تو این قسمت نمی تونید از Session برای گرفتن اطلاعاتتون استفاده کنید .

چرا ؟

چون هنوز Session فعالیتش رو شروع نکرده ، در نتیجه هیچ کلیدی نداره ....

mp2009
دوشنبه 04 شهریور 1387, 00:24 صبح
پس به نظر شما از چی استفاده کنم؟

mostafa_sgh
دوشنبه 04 شهریور 1387, 00:28 صبح
این طور که از کدتون معلومه ، شما فقط کاربران عضو رو به Database اضافه میکنی !

تو این حالت منطقی به نظر نمیرسه این کد رو تو رویداد Session_Start نوشتید .

اینها رو تو همون قسمت Login بنویسید .

mp2009
دوشنبه 04 شهریور 1387, 01:02 صبح
مرسی از جوابت. جطور خودم یادم نبود!
مرسی مشکلم حل شد.

VB.NET2005
دوشنبه 04 شهریور 1387, 11:04 صبح
mp2009 (http://barnamenevis.org/forum/member.php?u=38856) عزیز :

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

mp2009
سه شنبه 05 شهریور 1387, 15:15 عصر
چشم اینم کد کامل



Penhani.DAL Dal = new Penhani.DAL();
Users UserrSystem = new Users();
if (UserrSystem.UserLogin(txt_UserName.Text, txt_Password.Text,drp_Role.SelectedValue) != "No_User_Exist")
{
if (drp_Role.SelectedValue == "Admin")
{
OnlineActiveUsers.OnlineUsersInstance.OnlineUsers. SetUserOnline(txt_UserName.Text);

}

System.Data.SqlClient.SqlConnection myConnection = new System.Data.SqlClient.SqlConnection(Dal._Connectio nString);
System.Data.SqlClient.SqlCommand myCommand = new System.Data.SqlClient.SqlCommand("sp_AddOnlineUser", myConnection);
myCommand.CommandType = System.Data.CommandType.StoredProcedure;
myCommand.Parameters.Add("@IP_Address", Request.ServerVariables["REMOTE_ADDR"]);
myCommand.Parameters.Add("@Session_ID", Session.SessionID);
myCommand.Parameters.Add("@UserName", txt_UserName.Text);
myCommand.Parameters.Add("@Role",drp_Role.SelectedValue);

//Execute Command
myConnection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();

lbl_Erorr.Visible = false;
Session["UserName"] = txt_UserName.Text;
Response.Redirect("../../Default.aspx");

}

else
{
lbl_Erorr.Visible = true;

}


مشکلی بود در خدمتم

milade
چهارشنبه 06 شهریور 1387, 08:14 صبح
یه سوال دارم.
شما توی این کد فقط کاربران رو اضافه می کنید.
چه طور اونها رو حذف می کنید از لیست کاربران انلاین؟
ممنون می شم جواب رو بدید(البته در صورتی که در حالتهای مختلف از جمله نزدن دکمه خروج هم کار کنه)
ممنون
بای