كيفية استخدام httpsession لتنفيذ سجلات الوصول QQ في Java ، تكشف هذه المقالة عن الإجابات عليك. المحتوى المحدد كما يلي
1. اكتب فئة بيانات الفضاء QQ (QQS.JAVA)
الفئة العامة QQS {private static linkedhashmap <integer ، string> qqs = new LinkedHashMap <integer ، string> () ؛ ثابت {qqs.put (10001 ، "Zhang San") ؛ qqs.put (10002 ، "li si") ؛ qqs.put (10003 ، "Wang Wu") ؛ qqs.put (10004 ، "Zhao Liu") ؛ qqs.put (10005 ، "Tian Qi") ؛ qqs.put (10006 ، "Jiao BA") ؛ qqs.put (10007 ، "Hou Jiu") ؛ qqs.put (10008 ، "Liu Shi") ؛ qqs.put (10009 ، "Xiao er") ؛ } static static linkedhashmap <integer ، string> getQQs () {return qqs ؛ }}2. اكتب صفحة من بيانات QQ الحقيقية وتصفح السجل (listservlet.java)
DOGED void public (طلب httpservletrequest ، استجابة httpservletresponse) يلقي servletexception ، ioException {// الحصول على كائن الجلسة httpsession session = request.getSession () ؛ // تعيين استجابة البيانات الصينية. setcharacterencoding ("UTF-8") ؛ استجابة. // الحصول على دفق الإخراج printWriter Out = response.getWriter () ؛ // الحصول على بيانات QQS LinkedHashMap <Integer ، string> qqs = qqs.getqqs () ؛ set <map.entry <integer ، string >> set = qqs.entryset () ؛ iterator <map.entry <integer ، string >> it = set.iterator () ؛ // بنية صفحة الإخراج Out.println ("<html> <Head> <title> QQ List </title> <style> a {margin-right: 20px ؛} </style> </head> <body>") ؛ Out.println ("<hr/> <br/>") ؛ Out.println ("<h3> QQ List </h3>") ؛ Out.println ("<hr/> <br/>") ؛ Out.println ("<hr/> <br/>") ؛ Out.println ("<hr/> <br/>") ؛ Out.println ("<hr/> <br/>") ؛ // loop out the Hyperlink of QQ Space بينما (it.hasnext ()) {map.entry <integer ، string> entry = it.next () ؛ integer num = enter.getKey () ؛ اسم السلسلة = entry.getValue () ؛ out.println ("<a href =/"/day08/store؟ num = "+num+"/">"+name+"</a>") ؛ }. out.println ("<h3> qq browsing History </h3>") ؛ Out.println ("<hr/> <br/>") ؛ // احصل على سجل سلسلة بيانات السجل = (String) Session.getAttribute ("History") ؛ if (history == null) {out.println ("<font color =/" red/"> آسف ، لا يوجد سجل وصول في الوقت الحاضر ... </font>") ؛ } آخر {// loop من خلال بيانات السجل التي تم الوصول إليها بواسطة سلسلة المستخدم [] nums = history.split ("،") ؛ لـ (String num: nums) {string name = qqs.getqqs (). get (integer.parseint (num)) ؛ Out.println (name+"،") ؛ }} // أغلق بنية الصفحة out.println ("</body> </html>") ؛ }3. اكتب صفحة تخزن مساحة QQ (storeqqservlet.java)
DOGED VOID DOGES (طلب httpservletrequest ، استجابة httpservletresponse) يلقي servleTexception ، ioException {// الحصول على كائن الجلسة httpsession جلسة = request.getSession (false) ؛ // احصل على سلسلة المعلمة num = request.getParameter ("num") ؛ // احصل على البيانات في سجل سلسلة الجلسة = (سلسلة) session.getAttribute ("History") ؛ // تحديد البيانات إذا (History == null) {// First Visit Session.setAttribute ("History" ، num) ؛ // History = 10001} آخر {// تفضل بزيارة session.setattribute ("History" ، History+"،"+num) ؛ // قم بتعيين عدد الأرقام وترتيب سلسلة العرض [] QQS = History.split ("،") ؛ // تحويل صفيف إلى مجموعة مريحة لقائمة التشغيل <string> list = arrays.aslist (qqs) ؛ // تحويل القائمة إلى LinkedList لتسهيل تشغيل LinkedList <Tring> linked_list = new LinkedList <String> () ؛ linked_list.addall (list) ؛ // حدد عدد QQs التي تظهر إذا (qqs.length <3) {if (linked_list.contains (num)) {// history = 10002،1003 // if linked_list.remove (num) ؛ linked_list.addfirst (num) ؛ } آخر {// History = 1004،10002،1003 // if linked_list.addfirst (num) ؛ }} آخر {//> = 3 if (linked_list.contains (num)) {// history = 10002،10003،10004 10004 // if linked_list.remove (num) ؛ linked_list.addfirst (num) ؛ } آخر {// History = 10005 ، 10002،10003 // لا يتضمن linked_list.removelast () ؛ linked_list.addfirst (num) ؛ }} // سجلات الوصول مع الأوقات الجيدة والطلب هي linked_list stringbuffer sb = new StringBuffer () ؛ لـ (string new_num: linked_list) {sb.append (new_num+"،") ؛ } string new_history = sb.toString () ؛ Session.setAttribute ("History" ، new_history) ؛ } // إعادة التوجيه إلى QQ List Page Response.SendRedirect ("/day08/list") ؛ }يقوم الرمز أعلاه بتخزين سجل تصفح المستخدم في كائن الجلسة ، ولكن الكائن موجود في ذاكرة الخادم ولديه حد زمني صالح. إذا حان الوقت ، سيتم تدمير الجلسة.
الوقت الافتراضي هو نصف ساعة (30 دقيقة).
4. تكوين الوقت الصحيح للجلسة
في web.xml من كل موقع ويب ، يمكنك تكوين الوقت الصحيح لكائن الجلسة الذي تم إنشاؤه بواسطة موقع الويب. لاحظ أن الوحدة هي دقائق عند التكوين.
thread.slessp (وحدات ميلي ثانية) ، ملف تعريف الارتباط.
<Session-Config> <Session-timeout> 2 </tessiont-timeout> الوحدة هي محضر </جلسة config>
5 تعطيل ملفات تعريف الارتباط
يمكن لملفات تعريف الارتباط استخدام العميل لتخزين بيانات الجلسة.
يمكن لـ Httpsession استخدام ملفات تعريف الارتباط لتخزين معلومات SessionId.
في الواقع ، في إعدادات المتصفح ، يمكنك رفض معلومات ملفات تعريف الارتباط التي أرسلها الموقع الإلكتروني.
في هذا الوقت ، سيؤدي الوصول إلى الحالات المذكورة أعلاه إلى حدوث استثناء مؤشر فارغ. إذا كنت بحاجة إلى إصلاح موقع الويب ، فيجب عليك استخدام تقنية URLRewiting.
urlrewriteting
تحليل أسباب المشاكل المذكورة أعلاه:
قام الخادم بإنشاء كائن جلسة ، ولكن نظرًا لأن المتصفح يحظر استقبال ملفات تعريف الارتباط ، لا يمكن للخادم إرسال قيمة المعرف للجلسة التي تم إنشاؤها إلى المتصفح في شكل رأس استجابة COOKIE للتخزين ، وبالتالي لن يتم إيقاف معرف الجلسة أثناء الزيارة الثانية ، بحيث لا يمكن العثور على الجلسة.
الطرق المشتركة
String Encoderedirecturl (url url) إضافة معلومات SessionId إلى سلسلة مسار إعادة التوجيه المحددة Encodeurl (url string) إضافة معلومات SessionId إلى عنوان URL العادي
مبادئ التنفيذ:
"أعد ترميز جميع عناوين عنوان URL في الصفحة باستخدام الطريقة أعلاه"
1 تعديل البرنامج أعلاه
1 listservlet.java
string path = "/day08/store؟ num ="+num ؛ path = response.encodeurl (path) ؛ out.println ("<a href = '"+path+">"+name+"</a>") ؛2. storeqqservlet.java
string path = "/day08/list" ؛ path = response.encoderedirecturl (path) ؛ response.sendRedirect (path) ؛
ما سبق هو كل شيء عن هذا المقال ، آمل أن يكون مفيدًا لتعلم الجميع.