服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

jsp与asp.net之间的session值共享


  介绍: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的值

扫描关注微信公众号