JSP与ASP.Net之间怎么Session值共享
介绍:asp.net中登录后,jsp可以用asp.net中的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(用户编号)这个敏感数据了. /*登录成功后,可将下列codeing放在登录的验证aspx页面中*/ //记录 session value 到数据库 //webmod.sqlconn是数据库的连接对象,读者自行替换成自己的数据库连接 } /*当用户退出系统,将数据库中对应的sessionid的一行数据删除,可放在退出页面,或global.asax的session_end过程中*/ //删除数据库中的 session value //webmod.sqlconn是数据库的连接对象,读者自行替换成自己的数据库连接 jsp程序源码片段: <% string saspnetsessionid=request.getparameter("aspnetsessionid"); //使用了连接池连接数据库,用户可以替换成自己的 string ssql="select userid,power from iis_session where id='"+saspnetsessionid+"'"; //读者自己替换读出结果集的代码 if(rs.next()) string suid = rs.getstring(1); /*将数据库中对应的sessionid的值读出来,并显示,如果asp.net的session超时,将没有值*/ } db.dbconnclose(); %>(www.iocblog.net 文章来源) 好了,虽然不是很好的方法,但也可以用,也同样保护了用户的一些敏感数据
这个话题刚开始,宝宝(itbaby.jss.cn)的思路是asp.net中序列化session以二进制数据保存到数据库,然后由jsp读取数据库中的二进制数据反序列化成session对
建立一张表
table name:
iis_session
field name :
id varchar(26) --存放asp.net的sessionid
userid int(4) --存放登录成功后的用户编号
power int(4) --存放用户的权限编号
asp.net程序源码片段:
private void writesession2db(string sessionid,string suid,string spwr)
{
//连接数据库代码,读者自行添加
string sessid = sessionid;
string strsql = "insert into iis_session(id,userid,power) values(@seionid,@uid,@pwr)";
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();
//关闭数据库连接,读者自行添加
private void removesession4db()
{
//连接数据库代码,读者自行添加
string sessid = session.sessionid;
string strsql = "delete from iis_session where id='"+sessid+"'";
sqlcommand sqlcmd = new sqlcommand(strsql,webmod.sqlconn);
sqlcmd.executenonquery();
//关闭数据库连接,读者自行添加
}
/*一个重定向到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);
}
<%@ page contenttype="text/html;charset=gb2312"%>
<%
/*
自己的数据库连接类,用户可以自己替换
*/ (www.iocblog.net 文章来源)
%>
<jsp:usebean id="db" scope="page" class="com.itbaby.bean.dbx.database"/>
string sdbsourcename="itbaby_dbpool";
db.dbconnopen(sdbsourcename);
java.sql.resultset rs=db.getrs(ssql);
{
string spower = rs.getstring(2);
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();
我将继续考虑使用序列化和反序列化的方式来达到不同的web语言之间共享session对象而不是上面的,共享session的值
Tag: Session ,ASP.Net ,共享
文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。