当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > JSP与ASP.Net之间的Session值共享

ASP.NET
asp.net Server.MapPath方法注意事项
asp.net下常用的加密算法MD5、SHA-1应用代码
几个 ASP.NET 小技巧
ASP.NET内置对象之Application对象
ASP.NET使用正则表达式屏蔽垃圾信息
asp.net“服务器应用程序不可用” 解决方法
asp.net Linq把数据导出到Excel的代码
asp.net ext treepanel 动态加载XML的实现方法
silverlight2.0Beta版TextBox输入中文解决方法
asp.net转出json格式客户端显示时间
asp.net下Linq To Sql注意事项小结
ASP.NET动态加载用户控件的实现方法
asp.net web大文件上传带进度条实例代码
asp.net DZ论坛中根据IP地址取得所在地的代码
向asp.Net进发 数据库连接操作
.net 上传文件前所未有的简单
asp.net gridview代码绑定
asp.net中List的使用方法
Asp.net(C#)实现验证码功能代码
asp.NET开发中正则表达式中BUG分析

ASP.NET 中的 JSP与ASP.Net之间的Session值共享


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 243 ::
收藏到网摘: n/a

介绍:ASP.NET中登录后,JSP可以用ASP.Net中的Session的值
这个话题刚开始,宝宝(itbaby.jss.cn)的思路是ASP.NET中序列化Session以二进制数据保存到数据库,然后由JSP读取数据库中的二进制数据反序列化成Session对

象,再强制转化成JAVA的Session对象,在JAVA端转换时,出现了错误,找遍网上的资料也没能解决,故采用一种替换的方式.

替换的方式的思路:

登录的ASPX文件中,在登录成功后将Session中的变量值保存到数据库中的一张表,关键字使用ASP.NET的Session对象的SessionID,然后建立一个ASPX文件,取

得当前登录用户的SessionID,并使用的ASP.NET重定向语句,转到JSP文件,该URL请求的路径格式为test.jsp?aspnetsessionid=ffj12d455p0ujr45vdqwhh45,如果

ASP.NET没有登录或登录不成功,虽然有SessionID的值,但数据库中是没有该SessionID关联的数据

可能有的读者发现,不用test.jsp?aspnetsessionid=ffj12d455p0ujr45vdqwhh45这样的请求的路径也可以完成,是的,可以用test.jsp?userid=1111这样的方

式也传递值,当然userid是由ASP.NET登陆成功后,取得的值,但这样有些用户就可以知道USERID(用户编号)这个敏感数据了.


建立一张表
tablename:
iis_session
fieldname:
idvarchar(26)--存放ASP.NET的SessionID
useridint(4)--存放登录成功后的用户编号
powerint(4)--存放用户的权限编号


ASP.NET程序源码片段:

/*登录成功后,可将下列CODEING放在登录的验证ASPX页面中*/

//记录Sessionvalue到数据库
privatevoidWriteSession2DB(stringsessionID,stringsUID,stringsPWR)
{
//连接数据库代码,读者自行添加
stringsessID=sessionID;
stringstrSQL="insertintoiis_session(id,userid,power)values(@seionID,@UID,@PWR)";

//webmod.sqlConn是数据库的连接对象,读者自行替换成自己的数据库连接
SqlCommandsqlCmd=newSqlCommand(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的一行数据删除,可放在退出页面,或Global.asax的Session_END过程中*/

//删除数据库中的Sessionvalue
privatevoidRemoveSession4DB()
{
//连接数据库代码,读者自行添加
stringsessID=Session.SessionID;
stringstrSQL="deletefromiis_sessionwhereid='"+sessID+"'";

//webmod.sqlConn是数据库的连接对象,读者自行替换成自己的数据库连接
SqlCommandsqlCmd=newSqlCommand(strSQL,webmod.sqlConn);
sqlCmd.ExecuteNonQuery();
//关闭数据库连接,读者自行添加
}


/*一个重定向到JSP的ASPX页面,在这个ASPX页面的PAGE_LOAD中添加如下代码*/
privatevoidPage_Load(objectsender,System.EventArgse)
{
stringstrSessionID=Session.SessionID.Trim();
StringstrRoot="Response.Redirect(strRoot,true);
}

JSP程序源码片段:
<%@pagecontentType="text/html;charset=gb2312"%>
<%
/*
自己的数据库连接类,用户可以自己替换
*/
%>
<jsp:useBeanid="db"scope="page"class="com.itbaby.bean.dbx.database"/>

<%

StringsASPNetSessionID=request.getParameter("aspnetsessionid");

//使用了连接池连接数据库,用户可以替换成自己的
StringsDBSourceName="itbaby_dbpool";
db.dbConnOpen(sDBSourceName);

StringsSql="selectuserid,powerfromiis_sessionwhereid='"+sASPNetSessionID+"'";

//读者自己替换读出结果集的代码
java.sql.ResultSetrs=db.getRs(sSql);

if(rs.next())
{

StringsUID=rs.getString(1);
StringsPower=rs.getString(2);

/*将数据库中对应的SESSIONID的值读出来,并显示,如果ASP.NET的SESSION超时,将没有值*/
out.print("<H1>ASP.NetSessionValueUserID="+sUID+"</H1><br><br>");
out.print("<H1>ASP.NetSessionValuePower="+sPower+"</H1><br><br>");

}
rs.close();

db.dbConnClose();

%>

好了,虽然不是很好的方法,但也可以用,也同样保护了用户的一些敏感数据
我将继续考虑使用序列化和反序列化的方式来达到不同的WEB语言之间共享Session对象而不是上面的,共享Session的值