تم تحديث المقالة برمجة صفحة تسجيل دخول الي الموقع مع كيفية استخدام الكوكيز في الدخول التلقائي وما هو الكوكيز والسشن وكيف يتم الاستفادة منهم في برمجة تسجيل صفحة دخول عضو للموقع
سنستخدم تقنية asp.net مع لغة السي شارب وقاعدة بيانات sql server
يمكنك تحميل المثال البرمجي بالكامل من هنا
نظرة عامة
لا يخلو موقع من برمجة شاشة تسجيل دخول مستخدم وزرار خروج مستخدم ايضا وتذكرني ايضا مثل شاشة دخول الياهو او الفيسبوك او اي موقع علي الانترنت .عندما يطلب منك اسم مستخدم وكلمة مرور . وايضا خيار تذكرني مثلا اسبوعين بحيث يتذكر المستخدم لمدة معينة يحددها مبرمج الموقع . كيف يتم ذلك
هناك ما يسمي بالكوكيز وهو شئ يتم تخزين البيانات به لحين الحاجة اليها .ولكن اين يتم تخزين الكوكيز .يتم تخزينها علي جهاز الكمبيوتر الخاص بالشخص الذي دخل الموقع
هل هي أمنة ؟ بالطبع لا يوجد موقع صغير او كبير علي الانترنت الا ويستخدمها .فهي أمنة .
كأنها شئ او علامة يعرفك بها الموقع
وتم شرح الكوكيز والسشن في محاضرة تخزين البيانات في المستوي الاول وهذا رابط المحاضرة فيديو
http://www.citystarit.com/lecture_vedioDetails.aspx?id=7
توضيح بسيط
الان وقبل اي شئ سوف نستخدم طريقة الكود في المقال وليس طريقة الاوبجكت اورينتد التي توفر في كتابة الكود
وهو موجود بالتفصيل في المحاضرات الفيديو في المستوي الخامس
في محاضرة البرمجة الكائنية ومحاضرة صنع فرام ورك خاص بالمرمج المحترف
سنبدأ بعمل قاعدة بيانات ونسميها دخول login
وعمل جدول مكون من اسم وكلمة مرور كالصورة الاتية وبه الحقول الاتية
user_id رقم المستخدم ويكون حقل اساسي ويزيد تلقائيا
user_name اسم المستخدم
user_pass كلمة المرو ونوعها نص
ثم قمت بتعبة اسم مستخدم وكلمة مرور لكي نجرب عليها المثال ووضعت بها اسم مستخد وكلمة مرور
الان يأتي دور الفيجوال ستوديو ..افتح الفيجوال ستوديو واختر انشاء موقع جديد كالاتي
اكتب اسم الموقع ثم اختر الاختيارات المعتادة كما في الصورة
وكنت قد انشأت تمبلت لصندوق وهو بسيط جدا تستطيع اخذه نسخ ولصق فقط فهو اتش تي ام ال .وهو لكي اضع به اسم المستخدم وكلمة المرور ..
من فضلك لتعرف كيفية تركيب تمبلت اتش تي ام ال راجع محاضرة تركيب وتحميل تمبلت للموقع في المستوي الاول
وهذا رابط للمحاضرة
http://www.citystarit.com/lecture_vedioDetails.aspx?id=12
الان افتح ملف الويب كونفيج وضع به نص الاتصال بقاعدة البيانات ..وهنا سوف نضع طريقة الاتصال بقاعدة البيانات sqserver
<connectionStrings>
<add name="db_ConnectionString" connectionString="Data Source=.;Initial Catalog=login;User ID=sa;
Password=developer1" providerName="System.Data.SqlClient"/>
</connectionStrings>
الان سوف اصنع 2 فانكشن خاصة بعملية الدخول
1- فانكشن الدخول نفسها والتأكد من اسم مستخدم وكلمة مرور
2- فانكشن وضع الكوكيز علي كمبيوتر الشخص الذي دخل الموقع لكي يتذكره الموقع مدي الحياة
3- في حدث قيام الصفحة او ظهورها page load ..حيث يتم وضع كود سوف نره ونشرحه ايضا
4- فانكشن زر خروج وتنظيف الكوكيز من الكمبيوتر .
الان افتح الصفحة العادية للموقع واعمل نسخة من الاتصال بقاعدة البيانات وضعها في قيمة نصية حتي تستطيع ان تسترجعها فيما بعد
string cs = ConfigurationManager.ConnectionStrings["db_ConnectionString"].ConnectionString.ToString();
1- فانكشن الدخول نفسها والتأكد من اسم مستخدم وكلمة مرور
void login(string user,string password)
{
// هنا فتحت الاتصال مع قاعدة البيانات
SqlConnection cn = new SqlConnection(cs);
cn.Open();
// هنا انشئت جملة استعلام ثم وضعتها داخل متغير تسهيلا بد ذلك
string sqlSelect = @"Select user_name,user_pass from users where
user_name=@name and user_pass=@pass";
SqlCommand cmd = new SqlCommand();
// هنا اخبره ان الاتصال سوف يتم بالداتاباز
cmd.Connection = cn;
// نوعه نص ..اي سوف يكون جملة استعلام وهي بالاعلي
cmd.CommandType = CommandType.Text;
// هنا وصلت جملة الاستعلام بالمتغير الذي وضعت به جملة الاستعلام
cmd.CommandText = sqlSelect;
// هذه هي البارمترز او المتغيرات التي يأخذ منها جملة الاستعلام اسم المستخدم وكلمة المرور
cmd.Parameters.AddWithValue("@name", user);
cmd.Parameters.AddWithValue("@pass", password);
// انشئت داتا ريدر
SqlDataReader dr;
dr = cmd.ExecuteReader();
if (dr.Read())
{
//اذا عثر علي بيانات يدخل علي صفحة المستخدم او اي صفحة تريدها مع ارسال قيمة السشن لاسم المستخدم
Session["user_name"] = txtUser.Text;
DontForgetMe();
Response.Redirect("Userhome.aspx");
}
else
{
lblMsg.Text = "هذا المستخدم غير موجود";
}
}
2- فانكشن وضع الكوكيز علي كمبيوتر الشخص الذي دخل الموقع لكي يتذكره الموقع مدي الحياة
void DontForgetMe()
{
// هل اختار الشخص تذكرني
if ((this.chkDontForget.Checked))
{
//اري هل المتصفح اصلا يدعم الكوكيز ام لا
if ((Request.Browser.Cookies))
{
//اري هل اسم الكوكيز تم حفظه علي جهاز الشخص ام لا
if ((HttpContext.Current.Request.Cookies["Hisham"] != null))
{
// هنا في حال يوجد كوكيز انشئه من جديد
// وضعت اسم للكوكيز
HttpCookie aCookie = new HttpCookie("Hisham");
aCookie.HttpOnly = true;
//قمت بتخزين اسم المستخدم او الدخول من تكست بوكس اسم المستخدم والباسورد من تكست الباسورد
aCookie.Values["User"] = txtUser.Text;
aCookie.Values["Pass"] = txtPass.Text;
// الان نأتي لمدة الكوكيز علي جهاز الشخص
// هنا وضعت الخاصية اضافة العام ..ايضا يوجد اضافة يوم او شهر
// ثم تضع بين القوسين العدد ..وهنا وضعت عدد 100 عام .اي تقريبا مدي الحياة او اي مدة تراها
aCookie.Expires = DateTime.Now.AddYears(100);
// ثم امر اضف الكوكيز السابقة
Response.Cookies.Add(aCookie);
}
//اذا لم يجد كوكيز علي جهاز الشخص انشئه ايضا في حال الدخول التلقائي
else
{
HttpCookie aCookie = new HttpCookie("Hisham");
aCookie.HttpOnly = true;
aCookie.Values["User"] = txtUser.Text;
aCookie.Values["Pass"] = txtPass.Text;
aCookie.Expires = DateTime.Now.AddDays(30);
Response.Cookies.Add(aCookie);
}
}
}
}
وهذا برمجة الضغط علي زر دخول
الان اعمل حدث الضغط علي الزر ..من خلال الضغط علفيه بالماوس مرتين وسوف ينشأ الحدث الاتي
وهذا هو الكود لزر دخول بالحدث
protected void btnLogin_Click(object sender, EventArgs e)
{
//نفذ الفانكشن الخاصة بالدخول مع اخذ القيم التي تحتاجها
login(txtUser.Text, txtPass.Text);
// هنا واخيرا قم بحفظ الكوكيز علي جهاز المستخدم حتي يتذكره مدي الحياة
DontForgetMe();
}
3- في حدث قيام الصفحة او ظهورها page load ..حيث يتم وضع كود سوف نره ونشرحه ايضا
وهو كود يوضع في حدث الصفحة نفسها ..لكي نري هل يوجد كوكيز علي الكمبيوتر ..ان وجد الكوكيز يدخل بها تلقائيا ولا تحتاج الي ضغطة زر
لان كل شئ يتم تلقائي
يري اسم الكوكيز موجود ام لا ثم يأخذ اسم المستخد وكلمة المرور منه ..ثم يدخل به تلقائيا
وهذا هو الكود
try
{
//اري هل المتصفح اصلا يدعم الكوكيز ام لا
if (Request.Browser.Cookies)
{
// هل اسم الكوكيز موجود علي جهاز الشخص
if (Request.Cookies["Hisham"].Value != "")
{
//هنا وضعت اسم المستخد = اسم الكوكيز العام وبالتحديد اسم المستخدم الذي بداخله
string user = HttpContext.Current.Request.Cookies["Hisham"]["User"].ToString();
// متغير الباسورد = قيمة الكوكيز التي تسمي باس
string password = HttpContext.Current.Request.Cookies["Hisham"]["Pass"].ToString();
// ثم اخيرا اسم الفانكشن للدخول وقد مررت بها اسم المستخدم وكلمة المرور من المتغيرات السابقة
login(user, password);
}
}
}
catch
{
// طبعا تفاديا لانه لن يعثر علي اسم الكوكيز علي الكمبيوتر
// فنعالج ذلك من خلال try
}
4 - فانكشن زر خروج وتنظيف الكوكيز من الكمبيوتر وحذف السشن ايضا .
هذا الكود هو زر مكتوب في الاعلي مثل زر خروج في الفيسبوك او اي موقع اخر
//اري هل اسم الكوكيز تم حفظه علي جهاز الشخص ام لا
if ((HttpContext.Current.Request.Cookies["Hisham"] != null))
{
// حذف السشن للمستخدم
HttpContext.Current.Session.RemoveAll();
HttpContext.Current.Session.Abandon();
//ثم وضع ان الكوكيز قبل العدد الذي كتبناه في شاشة الدخول
// اي ضع فقط الرقم يسبقه رمز السالب او علامة الناقص ..اي كأنك تقول له انقص العدد كله ..
//فينقص العدد بالفعل الذي وضعته في شاشة الدخول وبالتالي يصبح صفر .اي لا يوجد
HttpContext.Current.Response.Cookies["Hisham"].Expires = DateTime.Now.AddYears(-100);
}
//ثم بعد تنظيف الكوكيز والسشن ..ينتقل الي صفحة الدخول مرة اخري
Response.Redirect("Default.aspx");
الان قم بحفظ ما سبق وقم بتشغيل الصفحة ..والان سنجرب اسم دخول ولكن بكلمة مرور خطأ
وسوف يعطي رسالة خطأ
الان بعد كتابة اسم المستخد بشكل صحيح وكلمة المرور سوف يدخل علي الصفحة الخاصة بالمستخدم وسوف يتذكرك مدي الحياة
ولاننا قلنا للصفحة ان تطبع اسم المستخدم في حدث الباج لود للصفحة فسوف يظهر ..مرحبا هشام بكر