الانتقال إلى المحتوى

Jsp session


bint_mo7ammed

Recommended Posts

السلام عليكم

حبيت اسال كيف اضع قيمة معينة بالسيشن عند الضغط على لينك معين بمعنى إخر

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

و دي أعرض للعميل الحسابات حقتة على شكل لينك
<a href="page.jsp" onclick="********">print account number</a>

و دي أحط في "*********" كود يضع قيمة الاكونت نمبر اللى هو رقم الحساب و يودية صفحةpage.jsp و يكون فيها مجموعة العمليات التي يمكنك أن تقوم بها على هذا الحساب

و شكرا بنت محمد :)

رابط هذا التعليق
شارك

ارسلي Parameters

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

<a href ="showinfo.jsp?client_id=<%=clientID%>">click here</a>


وهذا الكود بعد الضغط على اللينك بينقلك الى صفحة showinfo.jsp
مع العلم ان client_id هذا اسم باراميتر بيظهر فوق في صفحة البراوزر فمثلاً لو كانت قيمة المتغير clientID هي 007 وبعد الضغط على كلمة click here بتنتقل الى صفحة عنوانها

http://localhost:8080/showinfo.jsp?client_id=007

ومن الصفحة showinfo.jsp تقدرين تقرين قيمة المتغير client_id بواسطة الامر هذا

Hello <b><%= request.getParameter("client_id") %></b>


ومافي حاجة للسيشن .

رابط هذا التعليق
شارك

بالضبط مثل ما قال الاستاذ احمد بالنسبة لطريقة ارسال الـ parameter

أما لو أردت حفظ قيمة معينة في الـ session مثل اسم المستخدم الحالي ، فأنت غالباً ستحفظين اسم المستخدم وقت تسجيل الدخول ليتمكن من التنقل بين الصفحات المتاحة له بسهولة بدون الحاجة لارسال بياناته في كل مرة
و تكون بالطريقة التالية :
في صفحة الـ JSP :

session.setAttribute("userid",user_id);


أما اذا كان العمل داخل servlet او اي كلاس آخر :

HttpSession currentSession = HttpSession();
currentSession.setAttribute("userid",user_id);



ثم يتم الحصول على القيمة من خلال :

String id = session.getAttribute("userid");



وزي ما قلت و اكرر واقول لا يصير شغلنا كله في صفحة الـ jsp

بالتوفيق

رابط هذا التعليق
شارك

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

بالنسبة لسؤالك عن المكان المناسب لاضافة قيمة الى الـ session
قد يكون كما ذكرت أنت في الـ Datapage Action سواء في الحدث onCommit او onSubmit او onCreate على حسب ما تريد أنت .

وقد يكون ( وهذا الأغلب) في Action class مستقل موجود في البرنامج للقيام بعملية معينة سواء استدعاء stored procedure أو بعمل select مباشر على قاعدة البيانات أو حتى لتغيير لغة المستخدم .. بحيث تقوم باضافة قيمة معينة للـ session في حالة أن تتم العملية بشكل صحيح و إلا تبقى القيمة كما هي .

مثال :
أنت تريد أن يقوم المستخدم بتسجيل الدخول ثم تضيف اسم المستخدم و لغته في الـ session
المفروض أن عندك الملفات التالية في برنامجك للقيام بهذه العملية (تسجيل الدخول) :
1- login.jsp
2- LoginForm.java
3- LoginAction.java

1- login.jsp
يحتوي على html form مكون من اسم المستخدم وكلمة المرور

2- LoginForm.java
ملف جافا يحتوي على get and set للـ fields الموجودة في صفحة تسجيل الدخول . و يمكن من خلاله عمل validation للبيانات .

3- LoginAction.java
و هنا تتم عملية الـ login بشكل فعلي و في مثالنا سنقوم بالتالي :

select name,lang from users where userid = naif224 and pass = pw;


طبعاً تنفيذ الـ select statment ليس بهذه الطريقة مباشرة إنما بالطريقة المعروفة في الجافا ، المهم أن نحصل على اسم المستخدم ولغة المستخدم .
في حالة وجود المستخدم سنقوم باضافة اسمه و لغته إلى الـ session :

HttpSession currentSession = HttpSession();
currentSession.setAttribute("username",name);
currentSession.setAttribute("lang",lang);


و من ثم ننقل المستخدم الى صفحة لوحة التحكم مثلاً أو اي صفحة :

mapping.getForward("validlogin");



أما في حلة فشل التسجيل فنقوم فنعيده الى صفحة التسجيل

mapping.getForward("invalid");



بحيث validlogin و invalid هي عبارة عن mapping معرفة في الـ struts


الخلاصة :
بإمكانك اضافة قيمة إلى الـ session من اي مكان في البرنامج لكن الأفضل أن تضيفها بعد حدوث الـ action الذي تريده سواء login او اي حدث آخر .

بالتوفيق

تم تعديل بواسطة خالد عبدالله
رابط هذا التعليق
شارك

select username,lang from users where username = naif and password = lang

---------------------------------------
أنت يا خالد كتبت في LoginAction.java ان تعمل التالي :
طبعاً تنفيذ الـ select statment ليس بهذه الطريقة مباشرة إنما بالطريقة المعروفة في الجافا ، المهم أن نحصل على اسم المستخدم ولغة المستخدم .
فسؤالي هو : كيف اعمل او اضع تعليمة الـselect في الجافا واشيك على اسم الـuser و password ؟؟؟؟؟

هل احتاج ان استدعي function او procedure ، وإذا كان كذلك كيف استدعيها ؟؟

رابط هذا التعليق
شارك

لكل من سأل Authentication and Autheriazation قصة طويلة و أساليب مختلفة و تقنيات متعددة للتحكم بها .

يجب أولاً التفريق بين Authentication وهي تجيب عن سؤال :
هل الشخص يحق له الدخول على النظام أم لا ؟ و تحت أي مجموعة يندرج هذا اشخص ، هل هو مستخدم أم مدير ؟
و Authorization تجيب عن سؤال :
هل هذا الشخص يحق له اجراء هذه العملية أم لا ؟
مثلاً هل يحق للمستخدم "نايف" أن يحذف بيانات مستخدم ؟؟

هذا الفرق الكبير يجعل هناك فرق أيضاً في إجراء هاتين العمليتين .
فالبعض يفضل إجراؤهما على مستوى قاعدة البيانات بحيث تكون كل الـ users control بما فيها و الصلاحيات لكل مستخدم و تقسيم المستخدمين إلى مجموعات مثلاً ( users , admins, superadmin, visitors ) وهذا يساعد على تسجيل كل العمليات . و في هذه الحالة تحتاج غالباً إلى DBA يقوم بهذه العمليات . وهذه تستخدم غالباً في التطبيقات التي تتطلب أمن كبير جداً سواء بيانات مالية أو أمنية أو حكومية أو غيرها .

والبعض الآخر يفضل إجرائها على مستوى الـ business بحيث يكون لكل مجموعة class type مثلاً User.java و Admin.java و يعطى لكل كلاس صلاحيات تختلف عن الآخر و يتم ضبط إمكانية تنفيذ العملية و عمل access عليها من خلال تلك الصلاحيات .
و أذكر أني عملت مثل هذه الصلاحيات في ADF Business Components

و بعض ممن يستخدمون طبقة الـ controller سواء struts او jsf backing beans يفضلون إجراء الـ Authentication and Autheriazation هنا في هذه الطبقة .

و نادراً ما يلجأ المطورون إلى تنفيذ هذه الاجراءات في طبقة الـ view وهي صفحات الـ jsp نفسها في حالة الويب أو حتى الـ swing forms في حالة التطبيقات المكتبية .

أنا أفضل الطريقة الأولى أو الثانية (على حسب طبيعة البرنامج) و هي عمل Authentication and Autheriazation في قاعدة البيانات أو في الـ business tier . بحيث تأتي طبقة الـ controller بعد ذلك وقد حصلت على موافقة أو رفض بعمل access على هذه الصفحة أو تلك العملية و بالتالي نقوم بتحويل المستخدم إلى الصفحة المطلوبة أو إلى صفحة رسالة "ليس لديك صلاحية" مثلاً وهذا هو الدور الحقيقي للـ controller .

نأتي إلى زبدة الكلام :

هل يمكن ان ترشدني لافضل طريقة في عمل Authentication and Authoriazation باستخدام Struts

Authentication وهي بالضبط عملية الـ login وتتم كما ذكرت سابقاً مع توضيح هذا الأمر :
select name,lang from users where userid = naif224 and pass = pw;


هذا الأمر قد يكون مباشر بالاتصال مع قاعدة البيانات وهذا خطأ لأننا بهذا نقفز على طبقة الـ business و بالتالي فمن المفروض أن يكون عندنا method جاهزة نضعها في الطبقة الـ business سواء ejb او BC أو غيرها ، و نقوم هنا في الـstruts باستدعاء هذه الـ method .
أما اذا كنت لا تستخدم business tier فيمكنك عمل connection بشكل مباشر مع قاعدة البيانات و تنفيذ الأمر .
بالنسبة لك يا نايف ، بما أنك تستخدم ADF BC فلا ينبغي أن تعمل الاتصال يدوياً لأنك تملك اتصال اساساً و لديك BC تقوم بالتعامل مع قاعدة البيانات . يمكنك في هذه الحالة أن تنشئ bc او ejb خاصة تحتوي على ميثود تقوم بعملية تسجيل الدخول .
و هناك تقنية في الجافا اسمها
Java Authentication and Authorization Service (JAAS)
و تدعمها الـ ADF BC بشكل كبير

فنكون قد أخذنا البيانات من صفحة تسجيل الدخول و عن طريق الـ action form ارسلناها الى الـ action class ليقوم باستدعاء الميثود أو تنفيذ الأمر بشكل مباشر . بعد ذلك في حالة وجود نتيجة ايجابية للأمر نقوم بتسجيل بيانات المستخدم المهمة في الـ session ونقل المتصفح الى صفحة أخرى (الرئيسية أو لوحة التحكم) . أما في حالة أن النتيجة سلبية فنقوم بإعادته إلى صفحة الـ login .
لاحظ أننا في كل صفحة أيضاً سنتأكد من أن الـ session تحتوي على هذا الـ user وإلا نقوم بتحويله إلى الـ login .



أما عملية الـ Authoriazation
فنستطيع التحكم بها ما دمنا قد حصلنا على اسم المستخدم و نوعه مثل ( employee , manager , admin ) . ومن خلال الاسم والنوع نقوم بالتحقق من امكانيته لعمل هذه العملية أو تلك سواء في قاعدة البيانات أو في الـ business tier .


هذا بشكل مجمل .. أتمنى أن أكون أعطيت فكرة عامة

و إذا كان الموضوع يحتاج إلى مزيد من التوضيح ، أنا حاضر.

تحياتي :(

تم تعديل بواسطة خالد عبدالله
رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية