PDA

View Full Version : سوال: روش ساخت لاگین



komeil64
دوشنبه 30 فروردین 1389, 17:46 عصر
سلام
راستش من خیلی وقته کار نکردم
قبلا یه لاگین ساختم که توی همه صفحات سشن رو چک می کرد بود که بود نبوود میره لاگین
می خواستم ببینم روشی هست که مثلا توی فولدر ادمین یه وب کانفیگ بزاریم اون چک کنه و توی همه صفحات دونه دونه لاگین رو چک نکنیم؟ بهترین روش لاگین هم بنظرخودتون چیه؟
ممنون میشم راهنمایی کنید با ذکر مثال

General-Xenon
دوشنبه 30 فروردین 1389, 19:44 عصر
سلام
راستش من خیلی وقته کار نکردم
قبلا یه لاگین ساختم که توی همه صفحات سشن رو چک می کرد بود که بود نبوود میره لاگین
می خواستم ببینم روشی هست که مثلا توی فولدر ادمین یه وب کانفیگ بزاریم اون چک کنه و توی همه صفحات دونه دونه لاگین رو چک نکنیم؟ بهترین روش لاگین هم بنظرخودتون چیه؟
ممنون میشم راهنمایی کنید با ذکر مثال

این از وب کانفیگ



<?xml version="1.0"?>

<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<authorization>
<deny users="?"/>
<allow users="*"/>
</authorization>
</system.web>
</configuration>



اینم سورس لوگین



protected void LoginButton_Click(object sender, EventArgs e)
{
//txtUSERNAME --> username (email) Text Box;
//txtPASSWORD --> Password Text Box;
//Database User Table --> TB_USER
//PASSWORD --> Password Field
//EMAIL --> Username Field
if (txtUSERNAME.Text != string.Empty && txtPassword.Text != string.Empty)
{
string username = "";
SqlConnection CN58 = new SqlConnection();
SqlCommand CMD36456 = new SqlCommand("SELECT [PASSWORD] FROM [TB_USER] WHERE [EMAIL]='" + txtUSERNAME.Text.ToLower() + "'", CN58);
if (CN58.State != ConnectionState.Open) CN58.Open();
SqlDataReader DR = CMD36456.ExecuteReader();
while (DR.Read())
{
LBLStatus.Text = DR[0].ToString();
if (txtPassword.Text.ToLower() == DR[0].ToString().ToLower())
{
FormsAuthentication.RedirectFromLoginPage(txtUSERN AME.Text, false);
Response.Redirect("./USER/Default.aspx");
}
else { LBLStatus.Text = "\n داده ها اشتباه هستند \n"; }
}
CN58.Close();
}
else { LBLStatus.Text = "\n فیلد ها خالی هستند \n"; }
}



امیدوارم به دردت بخوره...

komeil64
سه شنبه 31 فروردین 1389, 10:20 صبح
ممنون دوست عزیز
با این تنظیم وب کانفیگ اگر مثلا 100 تا صفحه توی فولدر ادمین باشن من دیگه نیاز به چک کردن لاگین شده یا نشده توی صفحات ندارم؟
اگر اینطور هست صفحه لاگین در فولدر ادمین باید باشه یا روت سایت؟
ممنون

General-Xenon
سه شنبه 31 فروردین 1389, 11:31 صبح
دوست عزیز...صفحه لاگین باید بیرون پوشه باشه...تو وب کانفیگ اصلی سایت این کد رو باید اضافه کنی :


<system.web>
<authentication mode="Forms">
<forms defaultUrl="./" loginUrl="~/login.aspx" timeout="2000" name="abcd"/>
</authentication>

komeil64
سه شنبه 31 فروردین 1389, 15:12 عصر
سلام
ممنون از راهنماییتون
این کد صفحه لاگین من شد:


if (Login1.UserName != string.Empty && Login1.Password != string.Empty)
{
string username = "";
SqlConnection sconlogin = new SqlConnection(ConfigurationManager.ConnectionStrin gs["dbtestscocConnectionString"].ToString());
SqlCommand scomlogin = new SqlCommand("select password from tblusers where user_name='" + Login1.UserName.ToString() + "'", sconlogin);
if (sconlogin.State != ConnectionState.Open) sconlogin.Open();
SqlDataReader sdrlogin = scomlogin.ExecuteReader();
while (sdrlogin.Read())
{
if (Login1.Password.ToLower() == sdrlogin[2].ToString().ToLower())
{
FormsAuthentication.RedirectFromLoginPage(Login1.U serName, false);
Response.Redirect("../scoc");
}
else
{
Response.Write("لاگین نشد");
}
sconlogin.Close();
}
Response.Write("خالی");
}


ولی وقتی لاگین می کنم از این خط اشکال می گیره!



if (Login1.Password.ToLower() == sdrlogin[2].ToString().ToLower())


ارورش هم اینه:



Index was outside the bounds of the array.


ممنون میشم راهنمایی کنید

komeil64
سه شنبه 31 فروردین 1389, 15:32 عصر
مشکل حل شد
من فکر کرده بودم منظور از sdrlogin[2]. شماره فیلده که 0 کردم درست شد
فقط دو سوال
این لاگین تا چه زمانی اعتبار داره و با بستن اکسپلورر از بین میره یا خیر؟ و برای ساین اوت چه کار باید بکنم
و اینکه یه مشکلی هست که اگر یوزر وارد شده وجود نداشته باشه هیچ پیغامی نمیده و در صورتی پیغام میده که یوزر موجود باشه و رمز اشتباه باشه
تشکر

General-Xenon
سه شنبه 31 فروردین 1389, 21:53 عصر
بازم سلام....

توی وبکانفیگ اصلی کدی رو نوشتی که یکی از پارامتراش timeout بوود...من برات نوشتم 2000
یادته...؟

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


در مورد سئوال دوم...اگر رمز اشتباه باشه: اینه داری چک می کنی...تو سورس دقت کن...اما یوزر میتونی 1 ایف بذاری که اگر رمز توی بانک خالی بود، یعنی همچنین یوزری تو بانک نیست...

یعنی:


while (DR.Read())
{
if (DR[0].ToString() == "") lbl_Message.text = "User not valid."
}

komeil64
پنج شنبه 02 اردیبهشت 1389, 12:00 عصر
ممنون
بهترین و کاملترین پاسخ و راهنمایی بود که توی سایت پیدا کردم چون گام به گام جلو رفتیم
برای تکمیل
1- 2000 چند دقیقه یا چند ثانیه هست؟
2-من توی صفحه ای که بعد از لاگین میره می خوام چک کنم که یوزری که وارد شده فیلد رولش که توی تیبل یوزرهاست چیه اگر مدیر کل بود یه لینک رو نشون بده بهش یا توی صفحه مدیر کل چک کنم که یه مدیر معمولی نیاد اونجا آیا یوزر جایی ثبت میشه که بتونم چک کنم؟
ممنون

General-Xenon
پنج شنبه 02 اردیبهشت 1389, 12:29 عصر
بازم سلام...!

برای بدست اوردن یوزر فعلی....



User.Identity.Name
این کد یوزری که توی سیستم لوگین کرده باشه رو نشون می ده...:لبخند: حالا با داشتن یوزر می تونی چک کنی که از کدوم دسته هستش...مدیریت یا کاربر سایت:چشمک:

در مورد Timout فکر کنم بر حسب ثانیه باشه...اگر اشتباه گفتم اساتید اصلاحش کنند.

در مورد DR ، شما چون چند تا فیلد از توی بانک لود میکنی...هر فیلد یک ایندکس داره....
مثال:
اگر ترتیب فیلد ها اینجوری باشه..........
ID
NAME
USER
PASS
-----------------------------------------------------
DR[0] = ID
DR[2] = USER

این جوری هم میشه لود کرد.....دقت کن

DR["ID"] = ID
DR["PASS"] = PASS

komeil64
پنج شنبه 02 اردیبهشت 1389, 13:32 عصر
سلام
عالی بود ممنون از راهنماییت اما یک نکته اینکه وقتی کد زیر رو می نویسم پسورد یوزر رو که هش هم کردم نشون میده!


User.Identity.Name

komeil64
پنج شنبه 02 اردیبهشت 1389, 15:03 عصر
اشتباهم در این کد بود


FormsAuthentication.RedirectFromLoginPage(txtUSERN AME.Text, false);

که بجای تکست یوزر تکست پس رو گذاشته بودم

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

marijooon
جمعه 03 اردیبهشت 1389, 11:39 صبح
اشتباهم در این کد بود


FormsAuthentication.RedirectFromLoginPage(txtUSERN AME.Text, false);
که بجای تکست یوزر تکست پس رو گذاشته بودم

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

ممنون دوست عزیز

persiansoft_amin
جمعه 03 اردیبهشت 1389, 12:29 عصر
منم یه مدت دنبال همچین کدهای بودم حالا دو تا سوال دارم:
1-برای ساین اوت چه کار باید بکنیم؟؟(دوستمون هم پرسیدن ظاهری به جواب نرسیدند)
2-استفاده از این روش بهتره یا memmbership ها؟؟:چشمک::چشمک::چشمک:

General-Xenon
شنبه 04 اردیبهشت 1389, 00:26 صبح
بازم سلام....!

response.cache.setNoStore();
response.cache.setAllowResponseInBrowserHistory(Fa lse);
response.cache.setCacheability(httpCacheability.No Cache);
formAuthentication.SignOut();
sseson.Clear();
formAuthentication.reDirectToLoginPage();