คำอธิบายทั่วไป
ไม่กี่วันที่ผ่านมาฉันคิดโดยบังเอิญเกี่ยวกับปัญหานี้และรู้สึกว่ามันค่อนข้างใช้งานได้จริงและจำเป็นต้องแยกแยะ รู้สึกไม่ยากที่จะเขียนโหมดง่ายๆ จริงๆแล้วมันค่อนข้างง่ายที่จะทำให้ความคิดตรงไปตรงมา
เพื่อที่จะตระหนักว่าผู้ใช้ไม่สามารถเข้าสู่ระบบในเวลาเดียวกันเพียงแค่คิดถึง Sina, Baidu ฯลฯ ในความเป็นจริงเพียงลงชื่อเข้าใช้ที่หนึ่งและ "บีบ" ที่อื่นและคุณสามารถรู้ได้ว่าผลการดำเนินการคืออะไร จากนั้นย้อนกลับและคุณสามารถสร้างแนวคิดที่ชัดเจนขึ้น มาพูดคุยกันกันเถอะ
ก่อนอื่นเราต้องเข้าใจสิ่งที่ผู้ใช้ใช้ในการเข้าสู่ระบบเพื่อเข้าสู่ระบบนั่นคือหลักการของผู้ใช้ออนไลน์ นี่เป็นเพียงการจัดเก็บวัตถุของผู้ใช้ในเซสชันจากนั้นเรียกมันในเฟรมและหน้าเฉพาะอื่น ๆ สามารถอ้างอิงได้โดยตรง จากนั้นฟังก์ชั่นของ "การบีบลง" คือการทำให้เซสชันที่สร้างขึ้นใหม่มีประสิทธิภาพและทำให้เซสชันที่เก็บไว้ในผู้ใช้ไม่ถูกต้อง ณ จุดนี้ความคิดทั่วไปได้รับการจัดตั้งขึ้น แล้วจะทำอย่างไร?
หากคุณต้องการทราบวิธีการใช้งานคุณต้องเข้าใจกระบวนการจัดเก็บวัตถุผู้ใช้ในเซสชัน หลังจากผู้ใช้เข้าสู่ระบบเราสามารถรับผู้ใช้วัตถุของผู้ใช้และ session.setAttribute(key,value); เราจัดเก็บผู้ใช้ของผู้ใช้หรือตัวระบุที่ไม่ซ้ำกันอื่น ๆ เป็นคีย์และบันทึกวัตถุผู้ใช้เป็นค่า ด้วยวิธีนี้คุณสามารถโทรหาผู้ใช้คนเดียวได้ทุกที่ทุกเวลา ปัญหาของการจัดเก็บผู้ใช้ได้รับการแก้ไขแล้วปัญหาของการยกเลิกเซสชันเมื่อเข้าสู่ระบบ?
นี่ไม่ใช่เรื่องยาก เราสามารถมีคุณสมบัติเซสชันเพิ่มเติมเช่นการใช้แผนที่เพื่อจัดเก็บข้อมูลประจำตัวของผู้ใช้เป็นคีย์และบันทึกเซสชันที่เกี่ยวข้องเป็นค่า จากนั้นเมื่อผู้ใช้เข้าสู่ระบบซ้ำ ๆ คุณจะต้องนำเซสชันที่เกี่ยวข้องออกมาและทำให้เป็นโมฆะ
ณ จุดนี้แนวคิดการใช้งานมีความชัดเจน หลังจากนั้นไม่นานทุกคนก็ใจร้อนที่จะอ่านรหัสใช่ไหม? นี่คือรหัส:
การเตรียมการล่วงหน้า, อินเตอร์เฟส JSP
อินเทอร์เฟซนั้นง่ายเพียงแค่อินเทอร์เฟซเข้าสู่ระบบอย่างง่าย
<form action = "<%= request.getContextPath ()%>/userwxpservlet" method = "post"> ชื่อผู้ใช้Š <อินพุตประเภท = "text" name = "ชื่อผู้ใช้"/> <br/> รหัสผ่านŠ <อินพุตประเภท = "text" name = "password"/> <br/>
ข้ามไปที่หน้าหลังจากประสบความสำเร็จ
ยินดีต้อนรับ: ${sessionScope.user.username}登陆!<br/>
ฉันไม่ได้เขียนหน้าล้มเหลวคุณสามารถเขียนด้วยตัวเองและไม่มีอะไรจะพูดเกี่ยวกับหน้าล้มเหลว
การดำเนินการตามนิติบุคคลและการเข้าสู่ระบบ
Javabean ของผู้ใช้
ชื่อผู้ใช้สตริงส่วนตัว; รหัสผ่านสตริงส่วนตัว ผู้ใช้สาธารณะ () {} ผู้ใช้สาธารณะ (ผู้ใช้สตริง, รหัสผ่านสตริง) {super (); this.username = ผู้ใช้; this.password = รหัสผ่าน; } สตริงสาธารณะ getUserName () {ส่งคืนชื่อผู้ใช้; } โมฆะสาธารณะ setUserName (ชื่อผู้ใช้สตริง) {this.userName = ชื่อผู้ใช้; } สตริงสาธารณะ getPassword () {ส่งคืนรหัสผ่าน; } โมฆะสาธารณะ setPassword (รหัสผ่านสตริง) {this.password = รหัสผ่าน; -เข้าสู่ระบบการใช้งานบริการของผู้ใช้ดังนั้นฉันจะไม่เขียน DAO และอินเทอร์เฟซที่นี่ทุกอย่างง่าย
โดเมนบูลีนสาธารณะ (ผู้ใช้ผู้ใช้) {Properties Pro = คุณสมบัติใหม่ (); InputStream คือ = userwxpservlet.class.getClassLoader (). getResourceasstream ("user_wxp.properties"); สตริงรหัสผ่าน = null; System.out.println (คือ+"--------->"+pro); if (user == null) {return false; } ลอง {pro.load (IS); รหัสผ่าน = pro.getProperty (user.getUserName ()); if (user.getPassword ()! = null && user.getPassword (). เท่ากับ (รหัสผ่าน)) {system.out.println ("เข้าสู่ระบบสำเร็จ"); กลับมาจริง; }} catch (ioexception e) {e.printstacktrace (); } ในที่สุด {ถ้า (คือ! = null) {ลอง {is.close (); } catch (ioexception e) {e.printstacktrace (); }} return false; -ส่งคืนจริงถ้าการเข้าสู่ระบบสำเร็จและเท็จถ้ามันล้มเหลว
คลาส Servlet และคลาสเครื่องมือเชิงตรรกะที่สอดคล้องกัน
รหัสถัดไปคือรหัสจริงสำหรับการใช้งานผู้ใช้
ฉันได้กำหนดสองคลาสที่นี่คลาสเครื่องมือหนึ่งคลาสและคลาสการประมวลผลเซิร์ฟเล็ตหลักหนึ่งคลาส
องค์ประกอบทั่วไปบางอย่างถูกเพิ่มลงในคลาสเครื่องมือเช่นรหัสต่อไปนี้:
/*** ผู้ใช้แต่ละคนเก็บเซสชัน ใช้งานง่ายในทุกรูปแบบ! - - */ แผนที่คงที่สาธารณะ <สตริง, httpsession> mapsession = new hashmap <string, httpsession> (); รหัสทางออกของผู้ใช้ (ต้องบินไปที่เซสชันหรือลบวัตถุผู้ใช้ที่เกี่ยวข้อง): [java] ดูโมฆะโมฆะแบบคงที่ userLogout (ชื่อผู้ใช้สตริง) {ถ้า (mapsession.get (ชื่อผู้ใช้)! = null) {// รับเซสชันของผู้ใช้ // ลบผู้ใช้ในแผนที่ <ชื่อผู้ใช้เซสชัน> อย่าลืมออกจากผู้ใช้คุณต้องยกเลิกเซสชันหรือลบ mapsession ของผู้ใช้ remove (ชื่อผู้ใช้); // รับคอลเลกชันของแอตทริบิวต์ของการแจงนับเซสชัน e = session.getattributenames (); // ลบแอตทริบิวต์ทั้งหมดในขณะที่ (e.hasmoreElements ()) {string sessionName = (string) e.nextElement (); Session.RemoveAttribute (SessionName); } // ยกเลิกเซสชัน session.invalidate (); -รหัส servlet มีดังนี้:
Void Doget ที่ได้รับการป้องกัน (คำขอ httpservletRequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {string username = request.getParameter ("ชื่อผู้ใช้"); สตริงรหัสผ่าน = request.getParameter ("รหัสผ่าน"); ผู้ใช้ผู้ใช้ = ผู้ใช้ใหม่ (ชื่อผู้ใช้รหัสผ่าน); Userservice userservice = ใหม่ userservice (); httpsession session = request.getSession (); if (userservice.dologin (ผู้ใช้)) {// หลังจากเข้าสู่ระบบแล้วแทรกผู้ใช้ลงในเซสชันเซสชัน SetAttribute ("ผู้ใช้" ผู้ใช้); ถ้า (Cheacksession (ชื่อผู้ใช้)) {// ถ้าเซสชันมีอยู่แล้วก่อนหน้านี้ให้ออกจากผู้ใช้ dbutil.userLogout (ชื่อผู้ใช้); } // จัดเก็บเซสชันใหม่ในแผนที่ <ชื่อผู้ใช้เซสชัน> dbutil.mapsession.put (ชื่อผู้ใช้เซสชัน); // หลังจากการดำเนินการประสบความสำเร็จกระโดดมันเป็นการดีที่สุดที่จะเปลี่ยนเส้นทางที่นี่เพื่อแจ้งให้ผู้อื่นทราบว่าการเข้าสู่ระบบได้รับการร้องขอที่ประสบความสำเร็จ GetRequestDispatcher ("เข้าสู่ระบบ") ส่งต่อ (คำขอ, ตอบกลับ); กลับ ; } // ข้ามไปยังหน้าความล้มเหลวที่นี่ หากผู้อ่านสนใจพวกเขาสามารถเพิ่มด้วยตัวเอง}รหัสของการตรวจสอบ (ชื่อผู้ใช้) มีดังนี้:
/** * ตรวจสอบว่าเซสชั่นนี้มีอยู่แล้ว * @param ชื่อผู้ใช้ * @return จริง: มันมีอยู่แล้วควรลบ! FALSE: ไม่แสดง */ Private Boolean Checksession (ชื่อผู้ใช้สตริง) {httpsession session = dbutil.mapsession.get (ชื่อผู้ใช้); if (เซสชัน! = null) {return true; } return false; -ในที่สุดแนบการกำหนดค่า XML ของ servlet
<servlet> <sention> สำหรับการทดสอบผู้ใช้ไม่สามารถเข้าสู่ระบบซ้ำ ๆ </คำอธิบาย> <pramplay-name> userwxpservlet </display-name> <servlet-name> userwxpservlet </servlet-name> <servlet-name> userwxpservlet </servlet-name> <url-pattern>/userwxpservlet </url-pattern> </servlet-mapping>
ด้านบนเป็นฟังก์ชั่น Java ที่ตัวแก้ไขแนะนำให้คุณใช้ฟังก์ชันการเข้าสู่ระบบที่ไม่ซ้ำซ้อนของผู้ใช้ ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!