نقل قول aashkan
سلام 2 تا سوال داشتم
قطعه کدی میخواستم جهت برری و کنترل اعتبار کاربرانی که به سیستم وارد میشوند
و قطعه کدی که بتوان از طریق آن آپلود و دانلود فایل کرد
================================
صفحه login.aspx
یه web form با نام login به پروژه اضافه کنید و بعدشم کد های قسمت HTML رو اینطوری قرار بدید.
<div class="wrapper sh4 rd4">
<p style="margin-top:10px;">
<asp:Label ID="lblmessage" CssClass="message error" runat="server" Text=""></asp:Label>
</p>
<dl>
<dt>نام کاربری:</dt>
<dd>
<asp:TextBox CssClass="rd3" ID="txtlogin" runat="server"></asp:TextBox>
</dd>
<dt>کلمه عبور :</dt>
<dd>
<asp:TextBox CssClass="rd3" ID="txtpass" runat="server" TextMode="Password"></asp:TextBox>
</dd>
<dt>
<span>کد امنیتی :</span>
<asp:Label ID="lblsec" runat="server" Text=""></asp:Label>
</dt>
<dd>
<asp:TextBox ID="sec_code" runat="server"></asp:TextBox>
</dd>
<dt></dt>
<dd>
<asp:Button CssClass="rd3" ID="btn_login" runat="server" Text="ورود به سایت" OnClick="btn_login_Click" />
</dd>
</dl>
</div>
در بالاترین قسمت یه لیبل برای نمایش پیغام های خطا و بعدشم دو تا تکست باکس برای نام کاربری و کلمه عبور و بعدشم یه لیبل برای نمایش کد امنیتی و تکست باکس اون و در نهایت هم دکمه ارسال فرم.
خوب بعدش میریم سراغ قسمت کد های سی شارپ.اول از همه متد Page_load صفحه رو اینطوری می نویسیم.
protected void Page_Load(object sender, EventArgs e)
{
lblmessage.Visible = false;
if (!IsPostBack)
{
lblsec.Text = usersUtility.generateSecurity();
}
}
اون لیبل نمایش پیغام ها رو مخفی میکنیم و بعدش چک میکنیم که صفحه post back نباشه که اگه نباشه یعنی صفحه بار اول هست که داره لود میشه،بنابراین باید لیبل کد امنیتی رو با مقدار برگشتی از تابعی که برای تولید کد امنیتی ساختیم مقدار دهی کنیم.خوب حالا نوبت نوشتن کد لازم برای کلیک شدن دکمه ارسال فرم هستش.روی دکمه دابل کلیک کنید تا این متد ساخته بشه.
protected void btn_login_Click(object sender, EventArgs e)
{
string user_login = txtlogin.Text;
string user_password = txtpass.Text;
if (user_login == "" || user_password == "")
{
lblmessage.Visible = true;
lblmessage.Text = "لطفا اطلاعات را به صورت صحیح وارد نمایید";
}
else if (sec_code.Text != Session["sec_code"].ToString()){
lblmessage.Visible = true;
lblmessage.Text = "کد امنیتی اشتباه است";
lblsec.Text = usersUtility.generateSecurity();
}
else{
if (usersUtility.check_login(usersUtility.sanitize_Sql(user_login), usersUtility.sanitize_Sql(user_password)))
{
HttpContext.Current.Session.Add("userLogin", user_login);
Response.Redirect("index.aspx");
}
else{
lblmessage.Visible = true;
lblmessage.Text = "نام کاربری یا کلمه عبور صحیح نمی باشد";
lblsec.Text = usersUtility.generateSecurity();
}
}
}
در ابتدای متد مقادیر نام کاربری و کلمه عبور رو گرفتیم و در متغییر های رشته ای ذخیره کردیم،حالا چک می کنیم اینا خالی نباشن که اگه باشن پیغام خطا رو صادر میکنیم،در غیر این صورت چک میکنیم برای کد امنیتی که اگه درست نباشه (تطابق نداشته باشه) پیغام مناسب رو هم برای اون تولید میکنیم با این تفاوت که بعدشم باید دوباره کد امنیتی رو تولید کنیم،در غیر این صورت پس کاربر اطلاعات رو درست وارد کرده و باید اعتبار سنجی رو صورت بدیم برای این کار ما اومدیم ازیه تابع دیگه استفاده کردیم؛این تابع در همون کلاس userUtility نوشته میشه.که نام کاربری و کلمه عبور رو به عنوان ورودی دریافت میکنه و چک میکنه کاربر موجود هست یا نه.
اگه موجود باشه مقدار true و در غیر این صورت مقدار false برمیگردونه.
اینم از تابع چک کردن لاگین برای بررسی موجود بودن کاربر در دیتابیس.
public static bool check_login(string user_login, string user_password) {
SqlConnection cnn = new SqlConnection("Data Source=.;Initial Catalog=test;Integrated Security=true");
SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
cmd.CommandText = "SELECT user_ID FROM users WHERE user_login=@user_login AND user_password=@user_password";
cmd.Parameters.AddWithValue("@user_login", user_login);
cmd.Parameters.AddWithValue("@user_password",GenerateHash(user_password.Trim()));
cnn.Open();
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
cnn.Close();
if (dt.Rows.Count == 1)
{
return true;
}
return false;
}
اگه دقت کنید می بینید که ساختارش دقیقا شبیه همون توابع چک کردن نام کاربری و ایمیل هستش با این تفاوت که ما در کوئری تغییر کوچیکی برای اضافه کردن کلمه عبور دادیم.
خبو اگه تابع مقدار true برگردونه یعنی لاگین درسته و ما میایم نام کاربری رو در سشن قرار میدیم و کاربر رو به صفحه اصلی هدایت میکنیم و در غیر این صورت پیغام “نام کاربری یا کمله عبور اشتباه است رو صادر میکنیم”.
خوب حالا کدهای صفحه اصلی سایت.ما یه صفحه با نام index ایجاد میکنیم و یه لیبل داخلش قرار میدیم و کدهاش رو اینطوری می نویسیم.
protected void Page_Load(object sender, EventArgs e)
{
if (Session["userLogin"] != null)
{
lblStatus.Text = Session["userLogin"].ToString() + "خوش آمدید";
lblStatus.Text += "<a href=\"logout.aspx\">خروج</a>";
}
else
{
lblStatus.Text = "<a href=\"login.aspx\">ورود</a><a href=\"register.aspx\">ثبت نام</a>";
}
}
اسم اون لیبل lblStatus هست، ما در ابتدا چک کردیم اون مقداری که در سشن ذخیره کردیم موجود باشه که اگه باشه یه پیغام خوش آمدگویی به همراه نام کاربری ذخیره شده در سشن و یه لینک برای صفحه خروج در اون لیبل قرار میدیم در غیر این صورت لینک های ثبت نام و ورود رو به کاربر نمایش میدیم.
کد های صفحه خروج
صفحه خروج ما هم کد خاصی نداره فقط سشن رو پاک میکنیم و کاربر رو به صفحه اصلی هدایت کردیم.
protected void Page_Load(object sender, EventArgs e)
{
Session.Clear();
Session.Abandon();
Response.Redirect("index.aspx");
}
================================