الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

السماح بالدخول لبعض الصفحات في الموقع للأعضاء فقط

مغلق
بدأه metsy في 18 يونيو 2007 · 26 رد · 2,087 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اريد في بعض صفحات موقعي انا يسمح فقط للاعضاء الذين سجلوا وتم حفظ بياناتهم في قاعدة البيانات بالدخول فقط.....كيف؟

ارجو منكم المساعدة لأن تسليم مشروعي بعد اسبوع إن شاء الله :(

انا استخدم #VS.NET 2003 asp.net c

#2

طيب يا metsy مو لازم نتناقش شوي قبل ما نقلك هادا هوي الحل

المنطق بيقول ... في عملية تسجيل دخول بالموضوع

والمنطق بيقول انو في متحولات عم تتخزن قيمتها بمكان ما

والمنطق بيقول (يحرق حريشو هالمنطق) انو في شي اسمو عملية ابعاد للغير مسجيلن ...

والمنطق بيقول كتير شغلات بس هدول أهم شي رح نشوف كيف رح نحققهم

هلأ شوف معي يا metsy كيف رح نحقق هالموضوع والأهم هو فهم الفكرة وليس الحل دجني دجتك العافية (على قولة ستي)

أول شي في صفحة اسمها تسجيل دخول من خلالها منشوف أنا وانت يا metsy مين هالمستخدم بكودنا

يا ترا هوي موجود في النظام (بظن انو لازم ناخد اسم المستخدم وكلمة المرور من المستخدم)

هلأ اذا بالفعل الزلمة موجود في النظام منبعتو على صفحتو الرئيسية حسب نوع دخولو (هادا الكلام علاك ما بيفيد)

اللي بيفيد هوي انو حفظنا (بياناتوولتكن رقمو المعرف)في متحولات دائمة بدوام الصفحة (يفضل Session)

هلأ في الصفحة اللي ما بدنا يوصللها غير الأعضاء لازم نشوف المتحول اللي فيه رقم المعرف للمستخدم

هل المتحول يحتوي قيمة سالبة أو خالية أو شي غير موجود في النظام (معناها ما سجل دخول الله يصلحو)

منبعتو على صفحة تسجيل الدخول

واذا كان في المتحول قيمة تعني أنه عضو وقتها منخليه يتجول في الصفحة على كيفو لحد ما تتنهي صلاحية المتحول (بترك الصفحة من دون أحداث فترة من الزمن) أو لحتى يغلق المتصفح

هلأ هي فكرة تسجيل الدخول وهالعلاك المصدي تبعها بس الفكرة الأساسية انو بدي شوف المتحول الموجود في Session

#3

شكرا لك Arwany للمساعدة للمرة الثانية :) في الواقع انا لا ادري كيف اعمل ال session لأني بحثت في الموقع واغلب مواضيع ال session عللى مشاريع VB وليس c# وانا لا اعرف اتعامل مع VB

كل الذي اعرفه عن session ان اعمل حاجة في web.conf وبعد كدة اعمل حاجة تانية في الفورم نفسها

بس انا عايزة مش كل المشروع يكون بالتسجيل....انا اريد بعض الصفحات

وكمان عايزة يعمل check على الداتا بيز يشوف المستخدم قام بالتسجيل ام لا ؟

شكرا لك

#4

طيب رح اشرح بشكل سريع ومختصر كيف تعمل Session ونفهم كيف منحقق الموضوع

هلأ لكل عضو مسجل شي اسمو ID في جدول قاعدة البيانات صح ولا لأ ؟؟؟

اذا صح اذا تابع وإلا ... بدي انتف شعري

لساتنا معتبرين انو منعرف شو هادا ID

هلأ شو الفكرة الأساسية ...

انو لكل شخص بيطلب موقعنا العزيز بتنفتحلو Session خاصة فيه لالو بس وبالأصح للمتصفح الخاص فيه بس هوي

طيب ...

أول ما بيطلب الشخص الموقع (أول مرة فقط) رح يتنفذ كود Session_Start واللي فيه رح نضيف بيانات افتراضية لمتحولات ال Session

هلأ مكان كتابة كود الاضافة هو في ملف Global.asax

فقط أضف هذا الملف من اضافة ملف جديد وسترى الكود مكتوب وجاهز لكتابة الكود التالي ضمن الحدث الآنف الذكر

Session.Add("ID",-1);

وفي حدث نهاية صلاحية ال Session في نفس الملف Session_End نكتب :

Session["ID"]=-1;

هلأ هيك ضفنا متحول في ال Session وهي قيمة -1 أي أنه ليس مسجل

هلأ في صفحة تسجيل الدخول عند حدث الضغط على زر تسجيل الدخول وبعد اضافة اسم المستخدم وكلمة السر اذا كانتا صحيحتين يجب علينا اسناد

قيمة لهذا المتغير ليصبح العضو صالح لعرض الصفحات الآمنة له

بالكود التالي:

Session["ID"] = id;

حيث id هو متحول أخذناه من استعلام التحقق من صحة المستخدم

هلأ في الصفحة الآمنة رح نحط الكود البسيط هادا:

if(int.Parse(Session["ID"])!=-1)
{
//Kick him out of my secure pages
Response.Redirect("Login_Page.aspx");
}
else
{
//Welcome him as registred user
Title="Welcome as registerd member";
}

بتمنى تكون الفكرة العامة وصلت بطريقة استخدام هالمتحولات الخطيرة

لا ننسى اعداد ال Session في ملف الاعدادات web.config كالتالي:

<system.web>
<sessionState mode="InProc" cookieless="true" timeout="30"/>
</system.web>

حيث قصدنا من ذلك أن معرف ال Sessionالحالية لكل متصفح ستخزن ضمن ال Cookie في ذلك المتصفح فعليه دعمها

وأنها ستنتهي بمدة 30 دقيقة من توقف المستخدم على استخدام تلك الصفحة أو باغلاق المتصفح (تنتهي بعد 30 دقيقة من اغلاق المتصفح ولكن لا تبقى صالحة لشيء)

هذا والله أعلم

تم تعديل هذه المشاركة بواسطة Arwany في 18 يونيو 2007 في 16:26

#5

دلوقتي انا عندي سؤال ( بس من غير ما تنتف شعرك لو سمحت :D ازاي اعمل ال Global.asax دة؟ مفيش حاجة .asax اصلا..... ولا انت قصدك .aspx؟؟؟؟؟؟؟؟؟؟؟؟

وانا معلش اول مرة اتعامل مع موضوع ال session دة .........

اسفة للازعاج :(

#6

بالامكان الاستعانة أيضاً بالكوكيز

وغالباً تستعمل أكثر من ال sessions في ادارة المستخدمين ....

بالتوفيق

#7

يا عم مش محتاج global

بمجرد تسجيل الدخول ... في الأيفينت تبع زرار التسجيل روح اكتب الكود وريح دماغك

وموضوع ال state management سهل جدا وممكن تقراه في عشر دقائق بالضبط من أي مرجع

ادخل الموقع التالي

www.codeproject.com

واعمل بحث عن الموضوع اللي تحب ... واختصر تنتصر

#8

المشكلة ان انتو بتقولو كلام كبير اوي مش قادرة افهم .... انا اول مرة اتعامل مع session ومش عارفة ازاي اعمل كوكيز والحاجات دي

وكمان انا عندي شكوة صغيرة ياريت ادارة الموقع تهتم بيها ....

انا لما ببحث في جزء asp.net بيطلع عيني ....عشان مش مقسمينو c# , VB.net بجد بتعب اوي

ياريت يكون فيه# asp.net Vb , asp.net c ارجوكم

ياريت يا Arwany تكمل معايا الي شرحتو وياريت حد كمان يساعدني .... ومشكور يا the_shadow على مشركتك وانا حشوف السايت الي قولت عليه

#9

طيب انا حاحاول اوضحلكوا انا عايزة ليه ...

انا عندي فورم اسماها Guide.aspx

الفورم دي مش عايزة حد يدخل عليها الا لو مسجل بياناته في فورم

فانا عايزة لو حد حاول يدخل على الفورم guide من غير ما يسجل تظهرله فورم login.aspx

طيب مثلا لو كان واحد مسجل بياناته وكان اسمه Ahmed والباسورد 1234 وعمل تسجيل فعلا ...يبقى الصفحة ممكن يشوفها

دلوقتي انا لما بحثت في السايت لقيت ناس بيتكلوما عن انهم يحوّلوا شوية حاجات في ال web confg. يعني مثلا بدل كلمة windows تبقى froms وبدل allow user يعمل deny بس اللي فهمته ان كدة حيتعمل على كل الفورمات مش بس الفورم الي انا عايزاها ....و مفهمتش باقي الحاجات عشان كانوا بيتكلوما عن vb :(

يارييييييييييييييتتتتتتتتتتتتت حد يساعدني ارجوكوووووووووووووووووووو

#10

Arwanyyyyyyyyyyyyyyyyyyyyyyyyyy

انا عملت ال Global.asax :D وعملت كل الي قلت عليه الحمدلله بس ماعدا شىء واحد

(بس ارجوك من عير ما تنتف شعرك لوسمحت :D)

انا مش عارفة ازاي اتأكد من ان الاسم والرقم السري صحيح زي اللي موجود في الداتا بيز ( زي اللي المستخدم ادخلهم في مرحلة SIGNUP! )

ممكن تقوللي ازاي عشان برده اللي لقيته في السايت هنا vb مش C#

#11

طيب لما المستخدم يدخل اسمه والباسوورد ويعمل تسجيل دخول

اعملي sqlDataConnetion بعدين اعملي منه sqlCommand

ثم اعملي داتا ريدير sqlDataReader

والكوماند يكون بيعمل

select username,password from yourdb where username='usernametextbox.text'

بعدين اعملي مقارنة اللباسورد اللي في الفورم مع محتويات الكولم الثاني في الداتا ريدر

طبعا الداتا ريدر لو رجعت null من البياناتمعناها ان المستخدم مش موجود وتملي ريديركت للصفحة اللي تريديها

response.redirect("yourpage.aspx")

سلام

#12

ايوة انا عارفة اني لاز اعمل ريد للداتا الي داخلها اليوزر .... وكمان اعمل ريد لكل الداتا في قاعدة البيانات .... لكن ازاي المقارنة ...؟..... هي اكيد if بس مش عارفة اكتبها صح ...انا بحاول اعملها لكن مش بتيجي معايا :(

#13
اقتباس
ايوة انا عارفة اني لاز اعمل ريد للداتا الي داخلها اليوزر .... وكمان اعمل ريد لكل الداتا في قاعدة البيانات .... لكن ازاي المقارنة ...؟..... هي اكيد if بس مش عارفة اكتبها صح ...انا بحاول اعملها لكن مش بتيجي معايا

لو افترضنا ان ال textbox للمستخدم وكلمة السر هي بالترتيبtextboxuser ,,,textboxpass

وافترضنا انك عملتي الداتا ريدير بشكل صحيح واسمه rd

على اساس انه سيستعلم فقط عن اسم المستخدم وكلمة السر

ببسطاة الكود كالتالي

rd.read();

if (rd[0].toString()!=""&&rd[1].toString()==textboxpass.text)

//يعني اسم المستخدم موجود ومش فاضي وكلمة السر في التكست بوكس تساوي ما قرأه الريدر من قاعدة البيانات

// هنا نكتب الكود المراد تنفيذه بعد نجاح التحقق من المستخدم

else

{

// هنا نكتب الكود الذي ينفذ في حالة عدم صحة كلمة السر أو عدم وجود اسم المستخدم أصلا

}

#14

شكرا لك يا شادو بس طلع error

'object' does not contain a definition for 'toString'

دة في الجزء rd[0].toString

وكمان في الكود الخاص ب Arwany

The best overloaded method match for 'int.Parse(string)' has some invalid arguments

ودة في جزء الصفحة الامنة int.parse

وكمان بيقولي ان id مش متعرفة في السايت مع اني عملت جزء الويب كنفج.

انا اسفة انا عارفة اني مزعجة بس معلش ساعدوني لأنه مشروع تخرجي

يجعله في ميزان حسناتكوا إن شاء الله

#15

طيب هلأ اذا بدنا نحكي بشكل منطقي شوي لازم (متل ما اتفقنا) يكون في معرف لكل زائر يخزن في متحولات ال Session اللي كمان اتفقنا انو هي المتحولات رح تضل متوفرة طيلة فترة زيارة المستخدم للصفحة

والهدف من Global.asax هي أنه لما تنتهي صلاحية هي المتحولات تعطى قيما افتراضية

هلأ بالنسبة لعملية التحقق قوم بالتالي:

SqlConnection conn = new SqlConnection("Connection String Here....");
string SQL="SELECT ID FROM User_Tbl Where UserName='"+txt_Username.Text.Replace("'","''")+" AND Pasword='"+txt_Password.Text.Replace("'","''");
SqlDataAdapter da= new SqlDataAdapter(conn,SQL);
int id=0;
try
{
 conn.Open();
Dataset ds=new Dataset();
da.Fill(ds);
if(ds.Tables[0].Rows.Count>0)
id=int.Parse(ds.Tables[0].Rows[0].ItemArray[0].ToString());
if(id>0)
{
Session["ID"]=id;
//User OK
}
else
{
Session["ID"]=-1;
//Login Error
}
}
finally
{
conn.Close();
}

هادا كود التحقق من اسم المستخدم وكلمة السر (متضمنا تفادي تجاوز كلمة السر بحقن SQL وهي الطريقة الأولى لمحاولة اختراق أي موقع)

هلأ الموضوع التاني هو وضع كود ارساله الى صفحة تسجيل الدخول اذا لم يكن مسجل يذهب لصفحة تسجيل الدخول

هلأ اذا راح لصفحة تسجيل الدخول فيك تبعت معو باراميتر في الرابط كالتالي مشان يرجع للصفحة الآمنة بعد تسجيل الدخول وكل هالشي اختياري

Response.Redirect("Login.aspx?URL=Guide.aspx");

هلأ في صفحة تسجيل الدخول وبعد التحقق من صحة دخوله يمكنك فحص قيمة المتحول URL من الرابط اذا لم تكن خالية فيمكنك ارساله إليها مرة اخرى وهكذا يتم تحقيق أفضل نتيجة

#16

صباح الخير يا Arwany

انا جربت الكود لكن عندي errors

الاول : The best overloaded method match for 'int.Parse(string)' has some invalid arguments

ودة في جزء الصفحة الامنة int.parse

الثاني انه مش راضي يعمل creat ل dataset مش عارفة ليه ..... مع اتي عاملة using system.data.sqlclient

#17

ياريت طيب اي حد يتابع الموضوع ويشف الكود ليه مش شغال :(

#18

غريبة ... ممكن ارفاق ملف صفحة الدخول للتأكد بالله...

#19

شكرا لك يا Arwany

لقد ارفقت الفولدر

يارب الموضوع يتحل :(

try_login.rar

#20

ها ايه الاخبار ؟

#21

طيب اي حد بالله عليكوا يشوف الملف ويقول ايه الغلط لأنه مهم اوي

#22

Arwany انا ارفقت الملف زي ما طلبت ..... عرفت تصلّح اي حاجة ولا لأ ....ياريت ترد عشان لو مفيش امل احاول ادور على اي بديل

#23

طيب شو الخطأ اللي عم يواجهك.

انت مستخدم 2003 صح ؟

بس ممكن صورة عن الخطأ وان شاء الله بتنحل المشكلة

#24

انا كل ما اعمل run بيطلع اخطاء :

'object' does not contain a definition for 'toString'

دة في الجزء rd[0].toString

وكمان فيThe best overloaded method match for 'int.Parse(string)' has some invalid arguments

ودة في جزء الصفحة الامنة int.parse

وكمان بيقولي ان id مش متعرفة في السايت مع اني عملت جزء الويب كنفج.

#25

انا استخدم #VS.NET 2003 asp.net c

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…