思路:

ASP.NET中序列化Session以二进制数据保存到数据库,然后由JSP读取数据库中的二进制数据反序列化成Session对象,再强制转化成JAVA的Session对象
登录的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();

%>

ASP.Net与JSP如何共享Session值的更多相关文章

  1. ASP.NET MVC 使用Redis共享Session

    储存模式 1.InProc模式 这是ASP.NET默认的Session管理模式,在应用进程内维护Session. 2.StateServer模式 这是在服务器装了.NET环境后自带的一个StateSe ...

  2. ASP.NET二级域名站点共享Session状态

    我的前面一篇文章提到了如何在使用了ASP.NET form authentication的二级站点之间共享登陆状态, http://www.cnblogs.com/jzywh/archive/2007 ...

  3. ASP.NET下跨应用共享Session和使用Redis进行Session托管简介

    在之前的博客中,我说到了Session的共享问题,其中说到了Web Farm和Web Garden两种情况下Session的处理.在ASP.NET提供的Session处理方法中,有以下四种模式: 1. ...

  4. ASP.NET下跨应用共享Session和使用Redis进行Session托管

    在之前的博客中,我说到了Session的共享问题,其中说到了Web Farm和Web Garden两种情况下Session的处理.在ASP.NET提供的Session处理方法中,有以下四种模式: 1. ...

  5. [转]asp.net webform 与mvc 共享session

    公司内部系统最早是用.net webform模式开发的,现新项目用.net mvc 开发,现存在的问题就是如何保持原有.net webform的登录状态不变,而在mvc中能够验证用户的登录状态,也就是 ...

  6. asp.net webform 与mvc 共享session

    公司内部系统最早是用.net webform模式开发的,现新项目用.net mvc 开发,现存在的问题就是如何保持原有.net webform的登录状态不变,而在mvc中能够验证用户的登录状态,也就是 ...

  7. .NET二级域名共享Session

    ASP.NET二级域名站点共享Session状态 今天, 我要写的是如何在二级域名站点之间,主站点和二级域名站点之间共享Session. 首先, Session要共享,站点之间SessionID必须要 ...

  8. 使用 Redis 共享 Session 会话

    储存模式 1.InProc模式 这是ASP.NET默认的Session管理模式,在应用进程内维护Session. 2.StateServer模式 这是在服务器装了.NET环境后自带的一个StateSe ...

  9. android如何与asp.net服务端共享session

    近期需要实现一个功能,就是需要通过发送短信进行注册,现在想把短信验证码放到服务器的session值中,当客户端收到短信并提交短信码时由asp.net服务端进行判断,那么如何共享这个session那么需 ...

随机推荐

  1. 析构方法 deinit

    /* 析构方法: 对象的内存被回收前被隐式调用的方法, 对应OC的dealloc方法 主要执行一些额外操作, 例如释放一些持有资源, 关闭文件, 断开网络等 */ class FileHandle { ...

  2. 解决input和button错位(不齐)问题

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Java之IO(六)FileInputStream和FileOutputStream

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7001458.html 1.前言 前五章按照JDK的类顺序介绍了几种流,第五章讲了Java的文件系统.本章介绍Ja ...

  4. Visual Studio 2015中使用gdb远程调试linux程序

    VS的debug功能非常强大,相比而言linux上的图形化调试一直不是很好用. 如果可以使用VS来调试linux程序,应该是一件比较愉快的事情. 这在2015中变得可能,因为从2015开始VS支持An ...

  5. Linux C 遍历指定目录

    #include<stdio.h> //标准输入输出 #include<unistd.h> //各种系统调用 #include<dirent.h> //与目录有关的 ...

  6. java面试⑤前端部分

    2.4.1 简单说一下HTML,CSS,javaScript在网页开发中的定位? 2.4.2简单介绍一下AJAX 2.4.3 JS和JQuery的关系 2.4.4 JQuery的常用选择器 2.4.5 ...

  7. RabbitMQ上手记录–part 5-节点集群高可用(多服务器)

    上一part<RabbitMQ上手记录–part 4-节点集群(单机多节点)>中介绍了RabbitMQ集群的一些概念以及实现了在单机上运行多个节点,并且将多个节点组成一个集群. 通常情况下 ...

  8. Python描述符(__get__,__set__,__delete__)简介

    先说定义,这里直接翻译官方英文文档: 一般来说,描述符是具有“绑定行为”的对象属性,该对象的属性访问将会被描述符协议中的方法覆盖.这些方法是__get__(),__set__(),和__delete_ ...

  9. webapi找到了与该请求匹配的多个操作

    关于这个问题是路由在找方法的时候层没有指定对,同一个链接,同样的参数导致路由找不到方法导致的报错,可以在WebApiConfig中多配置一层,比如"api/{controller}/{act ...

  10. javascript 方法总结(Array篇)

    1.toString:返回以数组种的每个值得字符串形式拼接而成得一个以逗号分割得字符串 toStringArr = [1, 2, 3, 4, 5, 6] console.log(toStringArr ...