介绍: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(用户编号)这个敏感数据了.
建立一张表
table name:
iis_session
field name :
id varchar(26) --存放asp.net的sessionid
userid int(4) --存放登录成功后的用户编号
power int(4) --存放用户的权限编号
asp.net程序源码片段:
/*登录成功后,可将下列codeing放在登录的验证aspx页面中*/
//记录 session value 到数据库
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)";
//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();
//关闭数据库连接,读者自行添加
}
/*当用户退出系统,将数据库中对应的sessionid的一行数据删除,可放在退出页面,或global.asax的session_end过程中*/
//删除数据库中的 session value
private void removesession4db()
{
//连接数据库代码,读者自行添加
string sessid = session.sessionid;
string strsql = "delete from iis_session where id='"+sessid+"'";
//webmod.sqlconn是数据库的连接对象,读者自行替换成自己的数据库连接
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);
}
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);
if(rs.next())
{
string suid = rs.getstring(1);
string spower = rs.getstring(2);
/*将数据库中对应的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();
%>
好了,虽然不是很好的方法,但也可以用,也同样保护了用户的一些敏感数据
我将继续考虑使用序列化和反序列化的方式来达到不同的web语言之间共享session对象而不是上面的,共享session的值
闽公网安备 35060202000074号