国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

讓JSP與ASP.Net共享Session值

2024-07-10 12:54:59
字體:
供稿:網(wǎng)友
中國最大的web開發(fā)資源網(wǎng)站及技術社區(qū),
    這個話題剛開始,我的思路是asp.net中序列化session以二進制數(shù)據(jù)保存到數(shù)據(jù)庫,然后由jsp讀取數(shù)據(jù)庫中的二進制數(shù)據(jù)反序列化成session對象,再強制轉(zhuǎn)化成java的session對象,在java端轉(zhuǎn)換時,出現(xiàn)了錯誤,找遍網(wǎng)上的資料也沒能解決,故采用一種替換的方式。

 替換的方式的思路:
    登錄的aspx文件中,在登錄成功后將session中的變量值保存到數(shù)據(jù)庫中的一張表,關鍵字使用asp.net的session對象的sessionid, 然后建立一個aspx文件,取得當前登錄用戶的sessionid,并使用的asp.net重定向語句,轉(zhuǎn)到jsp文件,該url請求的路徑格式為 test.jsp?aspnetsessionid=ffj12d455p0ujr45vdqwhh45,如果asp.net沒有登錄或登錄不成功,雖然有sessionid的值,但數(shù)據(jù)庫中是沒有該sessionid關聯(lián)的數(shù)據(jù)可能有的讀者發(fā)現(xiàn),不用test.jsp?aspnetsessionid=ffj12d455p0ujr45vdqwhh45這樣的請求的路徑也可以完成,是的,可以用test.jsp?userid=1111這樣的方式也傳遞值,當然userid是由asp.net登陸成功后,取得的值,但這樣有些用戶就可以知道userid(用戶編號)這個敏感數(shù)據(jù)了。

 建立一張表

  table name:

   iis_session
   field name :
   id varchar(26) --存放asp.net的sessionid
   userid int(4) --存放登錄成功后的用戶編號
   power int(4) --存放用戶的權限編號

  asp.net程序源碼片段:

/*登錄成功后,可將下列codeing放在登錄的驗證aspx頁面中*/

//記錄 session value 到數(shù)據(jù)庫
private void writesession2db(string sessionid,string suid,string spwr)
{
  //連接數(shù)據(jù)庫代碼,讀者自行添加
  string sessid = sessionid;
  string strsql = "insert into iis_session(id,userid,power) values(@seionid,@uid,@pwr)";

  //webmod.sqlconn是數(shù)據(jù)庫的連接對象,讀者自行替換成自己的數(shù)據(jù)庫連接
  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();
  //關閉數(shù)據(jù)庫連接,讀者自行添加
}

/*當用戶退出系統(tǒng),將數(shù)據(jù)庫中對應的sessionid的一行數(shù)據(jù)刪除,可放在退出頁面,或global.asax的session_end過程中*/

//刪除數(shù)據(jù)庫中的 session value
private void removesession4db()
{
  //連接數(shù)據(jù)庫代碼,讀者自行添加
  string sessid = session.sessionid;
  string strsql = "delete from iis_session where id=’"+sessid+"’";

  //webmod.sqlconn是數(shù)據(jù)庫的連接對象,讀者自行替換成自己的數(shù)據(jù)庫連接
  sqlcommand sqlcmd = new sqlcommand(strsql,webmod.sqlconn);
  sqlcmd.executenonquery();
  //關閉數(shù)據(jù)庫連接,讀者自行添加
}

/*一個重定向到jsp的aspx頁面,在這個aspx頁面的page_load中添加如下代碼*/
private void page_load(object sender, system.eventargs e)
{
  string strsessionid = session.sessionid.trim();
  string strroot = "http://localhost/test.jsp?aspnetsessionid="+strsessionid;
  response.redirect(strroot,true);
}

  jsp程序源碼片段:

<%@ page contenttype="text/html;charset=gb2312"%>
<%
/*
自己的數(shù)據(jù)庫連接類,用戶可以自己替換
*/
%>
<jsp:usebean id="db" scope="page" class="com.itbaby.bean.dbx.database"/>

<%

string saspnetsessionid=request.getparameter("aspnetsessionid");

//使用了連接池連接數(shù)據(jù)庫,用戶可以替換成自己的
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);

if(rs.next())
{
  string suid = rs.getstring(1);
  string spower = rs.getstring(2);

  /*將數(shù)據(jù)庫中對應的sessionid的值讀出來,并顯示,如果asp.net的session超時,將沒有值*/
  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();

%>

  好了,雖然不是很好的方法,但也可以用,也同樣保護了用戶的一些敏感數(shù)據(jù),我將繼續(xù)考慮使用序列化和反序列化的方式來達到不同的web語言之間共享session對象而不是上面的,共享session的值。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 綦江县| 辽宁省| 周宁县| 泰宁县| 岳普湖县| 正宁县| 彭阳县| 泰和县| 略阳县| 砀山县| 昌图县| 建宁县| 平阴县| 四平市| 乌兰浩特市| 冕宁县| 泌阳县| 容城县| 绿春县| 临沂市| 叶城县| 哈尔滨市| 佛教| 阿拉尔市| 阿鲁科尔沁旗| 台南市| 灵石县| 大冶市| 绵竹市| 会宁县| 黄梅县| 天镇县| 永仁县| 屏南县| 广河县| 九台市| 乳山市| 恩施市| 定陶县| 封开县| 阆中市|