مقدمة: بعد تسجيل الدخول في ASP.NET، يمكن لـ JSP استخدام قيمة الجلسة في ASP.Net. لقد بدأ هذا الموضوع للتو فكرة Baby (itbaby.jss.cn) هي أن الجلسة المتسلسلة موجودة يتم حفظ ASP.NET في قاعدة البيانات كبيانات ثنائية. ثم يقرأ JSP البيانات الثنائية في قاعدة البيانات ويقوم بإلغاء تسلسلها إلى
كائن
جلسة ، ثم يحولها بالقوة إلى كائن جلسة JAVA. أثناء التحويل من جانب JAVA، حدث خطأ حدث ذلك، ولم يتمكن البحث عن المعلومات على الإنترنت من حل المشكلة، لذلك تم استخدامطريقة الاستبدال
.فكرة طريقة الاستبدال:
في ملف ASPX الذي تم تسجيل الدخول إليه، بعد تسجيل الدخول الناجح، احفظ القيمة المتغيرة
.جلسة إلى جدول في قاعدة البيانات. تستخدم الكلمة الأساسية معرف الجلسة لكائن الجلسة الخاص بـ ASP.NET، ثم تقوم بإنشاء ملف ASPX،
والحصول على
معرف الجلسة للمستخدم الذي قام بتسجيل الدخول حاليًا، واستخدام عبارة إعادة توجيه ASP.NET للانتقال إلى ملف JSPهو
تنسيق مسار طلب URL قد يجد بعض القراء أن الطلب يمكن إكماله دون استخدام مسار الطلب،
مثل test.jsp?aspnetsessionid=ffj12d455p0ujr45vdqwhh45. نعم، يمكن استخدام userid=1111
أيضًا
لنقل القيم هي القيمة التي يتم الحصول عليها بعد تسجيل دخول ASP.NET بنجاح، ولكن بهذه الطريقة يمكن لبعض المستخدمين معرفة البيانات الحساسة الخاصة بـ USERID (رقم المستخدم).
إنشاء جدول
اسم الجدول:
iis_session
اسم الحقل:
معرف varchar(26) - تخزين معرف جلسة ASP.NET
userid int(4) - يخزن رقم المستخدم بعد تسجيل الدخول الناجح
power int(4) - تخزين رقم إذن المستخدم
جزء الكود المصدري لبرنامج ASP.NET:
/ * بعد تسجيل الدخول الناجح، يمكن وضع الكود التالي في صفحة ASPX للتحقق من تسجيل الدخول * /
// تسجيل قيمة الجلسة إلى قاعدة البيانات
WriteSession2DB باطلة خاصة (معرف جلسة السلسلة، سلسلة sUID، سلسلة sPWR)
{
// اتصل برمز قاعدة البيانات، ويمكن للقراء إضافته بأنفسهم
سلسلة sessID = معرف الجلسة؛
string strSQL = "insert into iis_session(id,userid,power) value(@seionID,@UID,@PWR)";
//webmod.sqlConn هو كائن الاتصال بقاعدة البيانات، ويمكن للقراء استبداله باتصال قاعدة البيانات الخاصة بهم
SqlCommand sqlCmd = new 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();
// أغلق اتصال قاعدة البيانات، ويمكن للقراء الإضافة بأنفسهم
}
/*عندما يخرج المستخدم من النظام، احذف صفًا من البيانات المقابلة لمعرف الجلسة في قاعدة البيانات، والذي يمكن وضعه على صفحة الخروج أو في عملية Session_END الخاصة بـ Global.asax*/
//حذف قيمة الجلسة في قاعدة البيانات
الفراغ الخاص RemoveSession4DB ()
{
// اتصل برمز قاعدة البيانات، ويمكن للقراء إضافته بأنفسهم
سلسلة sessID = Session.SessionID؛
string strSQL = "delete from iis_session Where id='"+sessID+"'";
//webmod.sqlConn هو كائن الاتصال بقاعدة البيانات، ويمكن للقراء استبداله باتصال قاعدة البيانات الخاصة بهم.
SqlCommand sqlCmd = new SqlCommand(strSQL,webmod.sqlConn);
sqlCmd.ExecuteNonQuery();
// أغلق اتصال قاعدة البيانات ويمكن للقراء إضافتها بأنفسهم
}
/*تم إعادة توجيه صفحة ASPX إلى JSP، أضف التعليمات البرمجية التالية في PAGE_LOAD لصفحة ASPX هذه*/
Page_Load باطلة خاصة (مرسل الكائن، System.EventArgs e)
{
سلسلة strSessionID = Session.SessionID.Trim();
String strRoot = " http://localhost/test.jsp?aspnetsessionid="+strSessionID ;
Response.Redirect(strRoot,true);
}
مقتطف الكود المصدري لبرنامج JSP:
<%@ page contentType="text/html;charset=gb2312"%>
<%
/*
فئة اتصال قاعدة البيانات الخاصة، يمكن للمستخدمين استبدالها بأنفسهم
*/
%>
<jsp:useBean id="db"scope="page" class="com.itbaby.bean.dbx.database"/>
<
%
String sASPNetSessionID=request.getParameter("aspnetsessionid");
قاعدة البيانات المستخدمة، يمكن للمستخدمين استبدالها بقاعدة البيانات الخاصة بهم
String sDBSourceName = "itbaby_dbpool"؛
db.dbConnOpen(sDBSourceName);
String sSql="select userid,power from iis_session Where id='"+sASPNetSessionID+"'";
// يمكن للقراء استبدال الكود لقراءة النتائج المحددة بأنفسهم
java.sql.ResultSet rs=db.getRs(sSql)
;
{
سلسلة sUID = rs.getString(1);
String sPower = rs.getString(2);
/*اقرأ قيمة SESSIONID المقابلة في قاعدة البيانات واعرضها. إذا انتهت مهلة جلسة ASP.NET، فلن تكون هناك قيمة*/
out.print("<H1>ASP.Net Session Value UserID = "+sUID+"</H1><br><br>");
out.print("<H1>ASP.Net Session Value Power = "+sPower+"</H1><br><br>")
;
rs. Close();
db.dbConnClose();
%>
حسنًا، على الرغم من أنها ليست طريقة جيدة جدًا، إلا أنه يمكن استخدامها، كما أنها تحمي بعض البيانات الحساسة للمستخدم، وسأستمر في التفكير في استخدام التسلسل وإلغاء التسلسل طرق تحقيق مشاركة كائنات الجلسة بين لغات الويب المختلفة بدلاً من مشاركة قيم الجلسة المذكورة أعلاه