PDA

View Full Version : سوال: نمايش نام كاربر بعدازلاگين



Iran58
دوشنبه 26 بهمن 1388, 12:36 عصر
باسلام
چگونه مي توان نام كاربر رابعدازلاگين كرده دربالاي فرمي كه كاربرمربوطه باز مي كندنمايش بدهم.

tefos666
دوشنبه 26 بهمن 1388, 12:54 عصر
با اجازه اساتید من در حد توان خودم چند تا راه دارم ، هرچند راه های بهتری هم هست ولی اینا بد نیست ، یه متغیر public تعریف کن و ا اون بخون یا اینکه مقدار رو بریز تو ریجیستری و از اون بخون


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


public static string UserNameHolder;


اگر ورود کاربر تو فرم لاگین با موفقیت بود این کد رو بنویس



myclass.UserNameHolder = txtUserName.Text;
Microsoft.Win32.RegistryKey regkey = Microsoft.Win32.Registry.CurrentUser;
regkey.SetValue("UserName", myclass.UserNameHolder);


تو فرم اصلی یا همون فرمی که بعد از لاگین نشون میدی تو load این کد رو بزار




if (UserNameHolder != null)
{
label1.Text = "username" + myclass.UserNameHolder;
}


البته این راه کارت رو یکم پیچیده میکنه چون با ریجیستری سر و کار داری بهتره فقط نام رو بریزی تو همون متغیر که تو myclass ایجاد کردی و از اونجا بخونی .لی به هر حال من گفتم شاید خواستی استفاده کنی .

tefos666
دوشنبه 26 بهمن 1388, 13:04 عصر
راه ساده تر ، تو همون myclass که ساختی این کد رو بنویس



public static string user;


نام کاربری رو احتمالا از بانک اطلاعاتی برمیگردونی ؟ اگر اینطوره متغیر رو پر کن با datareader میتونی وگرنه که این کد رو بنویس ، البته وقتی چک کردی کاربر درست لاگین کرده



myclass.user =txtusername.text;();


حالا تو فرم اصلیت تو قسمت load‌کد زیر رو بنویس



label1.text=myclass.user;


اگر از بانک اطلاعاتی خواستی مقدار رو پر کنی



OleDbDataReader dr;
String strsql;
OleDbConnection con = new OleDbConnection(myclass.strcon);
strsql = " Select id,username,password From tbl_Users Where username='" + this.txtUser.Text + "' ";
OleDbCommand cmd = new OleDbCommand(strsql, con);
if (cmd.Connection.State != ConnectionState.Open) { cmd.Connection.Open(); }
dr = cmd.ExecuteReader();
if (dr.Read())
{
if (dr.GetValue(2).ToString() == txtPass.Text)
{

frmMain f = new frmMain();
f.Show();
this.Hide();
myclass.user = dr.GetValue(0).ToString();

}

rana-writes
دوشنبه 26 بهمن 1388, 13:12 عصر
سلام
میتونین به این شکل هم عمل کنین
تو فرم لاگین، زمانی که دکمه Login زده میشه و درستی نام کاربری چک میشه، مطمئنا یه دستور Select نوشته شده، حالا با این دستور Select میتونین اطلاعات کاربر رو هم واکشی کنین و توی یه متغیر سراسری بریزین
این متغیر سراسری رو تو هر جای برنامه میتونین صدا بزنین


using (SqlDataReader reader = LoginDataAccess.UserAccess(UserName, UserPass))
{
if (reader.Read())
{
ObjLogin.UserName = Convert.ToString(reader["UserName"]);
ObjLogin.Name = Convert.ToString(reader["Name"]);
ObjLogin.LName = Convert.ToString(reader["LName"]);
ObjLogin.Access = Convert.ToInt32(reader["Access"]);
}
}


توی این تکه کدی که براتون گذاشتم LoginDataAccess اسم یه کلاسه و من با تابع UserAccess درستی نام کاربری و پسورد رو چک کردم.
ObjLogin هم کلاسیه که متغیرهام رو به شکل سراسری داخلش معرفی میکنم.
کد این تابع UserAccess به این شکله:


public static SqlDataReader UserAccess(string UserName, string Pass)
{
SqlConnection connection = Connection.ConnectToCarpet();
SqlCommand command = newSqlCommand("Carpet_CheckUser", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@UserName", SqlDbType.NVarChar).Value = UserName;
command.Parameters.Add("@Pass", SqlDbType.NVarChar).Value = Pass;
SqlDataReader reader = command.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.CloseConnection);
return reader;
}


توی کلاس ObjLogin هم متغیرهام رو اینطوری معرفی کردم:


static public string UserName;
static public string Name;
static public string LName;


و حالا تو هر فرمی که بخوام مشخصات کاربر دیده بشه، توی فرم لود اینطوری فراخوانی میکنم:



LblName.Text = ObjLogin.Name + " " + ObjLogin.LName;


تا جایی که تونستم سعی کردم واضح بگم، اگه سوال دیگه ای در مورد کدها داشتین بپرسین

موفق باشین

AliRezaPro
دوشنبه 26 بهمن 1388, 13:53 عصر
روش های tefos666 و rana-writes بدی که دارد(که البته بسیار بد هست)اینه که فقط کافی است این متغیر تو حافظه پر بشه ! کرکری که چند روز هم کار کرده باشد میتواند مقدار اون رو از متغیر بخونه ! اگر با اولی بی جی کار کرده باشید این قضیه برایتان مشهود می باشد.به نظرم روش رجیستری باید بهتر باشد.ولی من از یه روش دیگری استفاده کردم.

rana-writes
دوشنبه 26 بهمن 1388, 14:26 عصر
سلام


روش های tefos666 و rana-writes بدی که دارد(که البته بسیار بد هست)اینه که فقط کافی است این متغیر تو حافظه پر بشه ! کرکری که چند روز هم کار کرده باشد میتواند مقدار اون رو از متغیر بخونه ! اگر با اولی بی جی کار کرده باشید این قضیه برایتان مشهود می باشد.به نظرم روش رجیستری باید بهتر باشد.ولی من از یه روش دیگری استفاده کردم.

میشه روش خودتون رو بگین
و یه کمی کامل تر در مورد مشکل این روش توضیح بدین؟
ممنونم

Saeed.Masoumi
دوشنبه 26 بهمن 1388, 14:33 عصر
سلام
منم با علیرضا موافقم اما تا حدی اون روش رجیستری هم فقط از سر باز کردن مشکله:
راه درست:
این لینک (http://barnamenevis.org/forum/showthread.php?t=203605)

tefos666
دوشنبه 26 بهمن 1388, 16:14 عصر
دوستان ببخشيد ، مشكل اين كار كجاست ؟‌از لحاظ امنيتي چه مشكلي داره ؟‌اين دوستمون كه نميخواد اطلاعات كلمه عبور رو ذخيره كنه ميخواد نام كاربري كه لاگين كرده رو يك جا نشون بده من موجه نميشم اصلا يك كركري هم بياد برنامه ايشون رو def كنه بفهمه اين كاربر مثلا ali هستش ، خوب بعدش ؟‌ :متفکر:

Saeed.Masoumi
دوشنبه 26 بهمن 1388, 17:03 عصر
سلام
دوست عزیز من به شخصه مشکلی با کرک شدن این نرم افزار نمی بینم مشکل اصلی شما استفاده از متغیر های سراسری و استاتیک است.یک سرچ در همین تالار بکن می بینی که دوستان قبلا خیلی راجع به ضعفهای این روش توضیح دادن و اگر ادامه بدم می شه تکرار مکررات.
روش رجیستری هم یک روش اضافه و بیشتر سمبل کرن است تا یک روش کارا و اصولی وقتی می توان با توجه با لینکی که در پست قبل دادم این مشکل را حل کرد چرا متوصل به راههای انحرافی شویم؟
مثل ثببت در رجیستری - ثبت در فایل و .....

soheil_1367
دوشنبه 26 بهمن 1388, 19:15 عصر
با اجازه اساتید محترم راهی که من به نظرم میاد که خیلی ساده هم هست اینه که تو یه فایل txt ذخیره کنی بعدش اون رو بخونی و نشون بدی فقط باید یادتم باشه که وقتی فرم بسته میشه اطلاعات فایل txt باید پاک بشه تا برای دفعه ی بعدی مشکلی نداشته باشه