บทนำ: หลังจากเข้าสู่ระบบ ASP.NET แล้ว JSP สามารถใช้ค่าของ Session ใน ASP.Net ได้ แนวคิดของ Baby (itbaby.jss.cn) คือการทำให้เซสชันเป็นอนุกรม ASP.NET ถูกบันทึกลงในฐานข้อมูลเป็นข้อมูลไบนารี่ จากนั้น JSP จะอ่านข้อมูลไบนารี่ในฐานข้อมูลและทำการดีซีเรียลไลซ์ข้อมูลลงในเซสชัน
อ็อบเจ็กต์
จากนั้นบังคับให้แปลงเป็นอ็อบเจ็กต์เซสชัน JAVA เกิดข้อผิดพลาด เกิดขึ้นและการค้นหาข้อมูลบนอินเทอร์เน็ตไม่สามารถแก้ไขได้จึงมีการใช้วิธีการทดแทน
:
ในไฟล์ ASPX ที่เข้าสู่ระบบหลังจากเข้าสู่ระบบสำเร็จให้บันทึกค่าตัวแปรใน เซสชันไปยังตารางในฐานข้อมูล คำสำคัญใช้ SessionID ของวัตถุเซสชันของ ASP.NET จากนั้นสร้างไฟล์ ASPX
รับ
SessionID ของผู้ใช้ที่เข้าสู่ระบบในปัจจุบัน และใช้คำสั่งเปลี่ยนเส้นทาง ASP.NET เพื่อไปที่ ไฟล์ JSP รูปแบบเส้นทางของการร้องขอ URL คือ test.jsp?aspnetsessionid=ffj12d455p0ujr45vdqwhh45 หากASP.NET ไม่ได้เข้าสู่ระบบหรือการเข้าสู่ระบบล้มเหลว แสดงว่าสำเร็จ แม้ว่าจะมีค่าสำหรับ SessionID แต่ก็ไม่มีข้อมูลที่เกี่ยวข้องกับ SessionID ในฐานข้อมูล
ผู้อ่านบางคนอาจพบว่าสามารถดำเนินการตามคำขอได้โดยไม่ต้องใช้เส้นทางคำขอ เช่น test.jsp?aspnetsessionid=ffj12d455p0ujr45vdqwhh45 ใช่ test.jsp สามารถใช้ได้หรือไม่ Userid=1111
ยัง
โอนค่าได้ คือค่าที่ได้รับหลังจากที่ ASP.NET เข้าสู่ระบบสำเร็จ แต่ด้วยวิธีนี้ ผู้ใช้บางรายจึงสามารถทราบข้อมูลที่ละเอียดอ่อนของ USERID (หมายเลขผู้ใช้)
สร้างตาราง
ชื่อตาราง:
iis_session
ชื่อฟิลด์:
id varchar(26) --จัดเก็บ SessionID ของ ASP.NET
userid int(4) – เก็บหมายเลขผู้ใช้หลังจากเข้าสู่ระบบสำเร็จ
power int(4) --จัดเก็บหมายเลขสิทธิ์ของผู้ใช้
ส่วนของซอร์สโค้ดโปรแกรม ASP.NET:
/*หลังจากเข้าสู่ระบบสำเร็จแล้ว รหัสต่อไปนี้สามารถวางไว้ในหน้า ASPX การตรวจสอบการเข้าสู่ระบบ*/
//บันทึกค่าเซสชันไปยังฐานข้อมูล
โมฆะส่วนตัว WriteSession2DB (สตริง sessionID, สตริง sUID, สตริง sPWR)
-
//เชื่อมต่อกับโค้ดฐานข้อมูล ผู้อ่านสามารถเพิ่มได้เอง
สตริง sessID = sessionID;
string strSQL = "insert into iis_session(id,userid,power)value(@seionID,@UID,@PWR)";
//webmod.sqlConn เป็นอ็อบเจ็กต์การเชื่อมต่อของฐานข้อมูล ผู้อ่านสามารถแทนที่ด้วยการเชื่อมต่อฐานข้อมูลของตนเองได้
SqlCommand sqlCmd = SqlCommand ใหม่ (strSQL,webmod.sqlConn);
sqlCmd.Parameters.Add("@seionID",SqlDbType.VarChar).Value = sessID;
sqlCmd.Parameters.Add("@UID", SqlDbType.Int ).Value = Convert.ToInt32(sUID.Trim());
sqlCmd.Parameters.Add("@PWR", SqlDbType.Int).Value = Convert.ToInt32(sPWR.Trim());
sqlCmd.ExecuteNonQuery();
//ปิดการเชื่อมต่อฐานข้อมูล ผู้อ่านสามารถเพิ่มได้เอง
}
/*เมื่อผู้ใช้ออกจากระบบ ให้ลบแถวข้อมูลที่สอดคล้องกับ SessionID ในฐานข้อมูล ซึ่งสามารถวางไว้บนหน้าออกหรือในกระบวนการ Session_END ของ Global.asax*/
//ลบค่า Session ในฐานข้อมูล
โมฆะส่วนตัว RemoveSession4DB ()
-
//เชื่อมต่อกับโค้ดฐานข้อมูล ผู้อ่านสามารถเพิ่มได้เอง
สตริง sessID = Session.SessionID;
string strSQL = "delete from iis_session โดยที่ id='"+sessID+"'";
//webmod.sqlConn เป็นอ็อบเจ็กต์การเชื่อมต่อของฐานข้อมูล และผู้อ่านสามารถแทนที่ด้วยการเชื่อมต่อฐานข้อมูลของตนเองได้
SqlCommand sqlCmd = SqlCommand ใหม่ (strSQL,webmod.sqlConn);
sqlCmd.ExecuteNonQuery();
//ปิดการเชื่อมต่อฐานข้อมูลและผู้อ่านสามารถเพิ่มได้ด้วยตนเอง
-
/*เพจ ASPX ถูกเปลี่ยนเส้นทางไปยัง JSP ให้เพิ่มโค้ดต่อไปนี้ใน PAGE_LOAD ของเพจ ASPX นี้*/
โมฆะส่วนตัว Page_Load (ผู้ส่งวัตถุ System.EventArgs e)
-
สตริง strSessionID = Session.SessionID.Trim();
สตริง strRoot = " http://localhost/test.jsp?aspnetsessionid="+strSessionID ;
Response.Redirect (strRoot จริง);
-
ข้อมูลโค้ดต้นฉบับของโปรแกรม JSP:
<%@ หน้า contentType="text/html;charset=gb2312"%>
-
-
คลาสการเชื่อมต่อฐานข้อมูลของตัวเอง ผู้ใช้สามารถแทนที่คลาสได้ด้วยตนเอง
-
-
<jsp:useBean id="db" scope="page" class="com.itbaby.bean.dbx.database"/>
<%
String sASPNetSessionID=request.getParameter("aspnetsessionid");
// การเชื่อมต่อพูลคือ ฐานข้อมูลที่ใช้แล้วผู้ใช้สามารถแทนที่ด้วยฐานข้อมูลของตนเองได้
สตริง sDBSourceName="itbaby_dbpool";
db.dbConnOpen(sDBSourceName);
String sSql="select userid,power from iis_session โดยที่ id='"+sASPNetSessionID+"'";
//ผู้อ่านสามารถแทนที่โค้ดเพื่ออ่านผลลัพธ์ที่ตั้งไว้ได้ด้วยตัวเอง
java.sql.ResultSet rs=db.getRs(sSql);
ถ้า(rs.next())
{
สตริง sUID = rs.getString(1);
String sPower = rs.getString(2);
/*อ่านค่า SESSIONID ที่เกี่ยวข้องในฐานข้อมูลและแสดงผล หาก ASP.NET SESSION หมดเวลา จะไม่มีค่า*/
out.print("<H1>มูลค่าเซสชัน ASP.Net UserID = "+sUID+"</H1><br><br>");
out.print("<H1>พลังของเซสชัน ASP.Net = "+sPower+"</H1><br><br>")
;
rs.close();
db.dbConnClose();
%>
โอเค แม้ว่าจะไม่ใช่วิธีการที่ดีนัก แต่ก็สามารถใช้ได้ และยังปกป้องข้อมูลที่ละเอียดอ่อนบางอย่างของผู้ใช้ด้วย ฉันจะพิจารณาใช้ซีเรียลไลซ์เซชันและดีซีเรียลไลซ์ต่อไป . วิธีในการบรรลุการแบ่งปันวัตถุเซสชันระหว่างภาษาเว็บที่แตกต่างกันแทนที่จะแบ่งปันค่าเซสชันข้างต้น