最新IBM水货笔记本价格,详细点击进入

查看完整版本: ASP和ASP.Net共享Session解决办法

风舞残阳 2008-4-2 13:44

ASP和ASP.Net共享Session解决办法

在原有的asp[wiki]程序[/wiki]中用asp.net添加功能模块,[wiki]共享[/wiki]SESSIONs是一个难点,下面介绍一种较为简洁的方法,可以在asp和asp.net中共享session会话。
登录页面使用C#重新创建,在成功登录后执行语句:
Response.Write("%26lt;scriptlanguage='javascript'%26gt;window.open('ASPXTOASP.aspx','new');%26lt;/script%26gt;");
打开aspxtoasp.aspx页面,action设为aspxtoasp.asp,即可将session值post到asp页面,因为是单向传递,不用在其他页面重复执行[wiki]动作[/wiki],经[wiki]测试[/wiki],传递成功!
[b]Aspxtoasp.aspx代码如下:[/b]
%26lt;scriptlanguage="C#"runat="server"%26gt;
Response.Write("%26lt;formname=tid=taction=ASPXTOASP.aspmethod=post%26gt;");
foreach([wiki]object[/wiki]itinSession.Contents)
{
Response.Write("%26lt;input[wiki]type[/wiki]=hiddenname="+it.ToString());
Response.Write("value="+Session[it.ToString()].ToString()+"%26gt;");
}
Response.Write("%26lt;/FORM%26gt;");
Response.Write("%26lt;script%26gt;t.submit();%26lt;/script%26gt;");
%26lt;/script%26gt;
[b]Aspxtoasp.asp代码如下:[/b]
%26lt;%
fori=1toRequest.Form.Count
Session(Request.Form.Key(i))=Request.Form(i)
next
Response.End
%%26gt;
%26lt;scriptlanguage="JavaScript"%26gt;
window.close();
%26lt;/script%26gt;
这是一个老话题了,因为最近用的到,所以没办法又到处找资料。[wiki]微软[/wiki]的[wiki]网站[/wiki]上提供的是用[wiki]数据库[/wiki]实现的,总觉得太麻烦,也有说直接使用的,但我没有试成功。我认为直接使用是不可能的。还有一种方法,就是通过几个页面转换,我使用的也是这个方法,通过总结搜索到的资料,整理后编写了几个页面来转换。主要是通过隐藏的input来实现的。具体方法如下:
asp转asp.net页面:
用一个asp页,把session[wiki]信息[/wiki]写到input中,提交给asp.net页
[b]trans.asp[/b]
%26lt;%
’’----------测试数据--------
session("name")="srx"
session("id")="1"
session("*")="f"
session("pass")="asdfas"
session("age")="23"
session("weight")="131"
’’--------------------------
Response.Write("%26lt;formname=frmid=frmaction=""asptoaspx.aspx""method=post%26gt;")
foreachIteminSession.Contents
   Response.Write("%26lt;inputtype=hiddenname="%26Item)
   Response.Write("value="%26Session(item)%26"%26gt;")
next
iflen(Request.QueryString("Destpage"))%26gt;4then 
   Response.Write("%26lt;inputtype=hiddenname=DestPagevalue="%26Request.querystring("DestPage")%26"%26gt;")
endif
Response.Write("%26lt;/FORM%26gt;")
Response.Write("%26lt;scr"+"ipt%26gt;frm.submit();%26lt;/scr"+"ipt%26gt;")
%%26gt;
[b]asptoaspx.aspx[/b]
%26lt;%@Pagelanguage="c#"%%26gt;
%26lt;scriptlanguage=C#runat=server%26gt;
privatevoidPage_Load(objectsender,System.EventArgse)
{
Session.Timeout=60;
for(inti=0;i%26lt;Request.Form.Count;i++)
{
 Session[Request.Form.GetKey(i)]=Request.Form[i].ToString();
}
allsession();//输出所有的Session,使用时可注释掉
try
{
if(Session["DestPage"].ToString().Length%26gt;4)
{
 Server.Transfer(Session["DestPage"].ToString(),true);
}
}
catch{}
}
privatevoidallsession()
{
Response.Write("Thereare"+Session.Contents.Count+"Session%26lt;I%26gt;var%26lt;/I%26gt;iables%26lt;P%26gt;");
foreach(objectobjinSession.Contents)
{
 Response.Write("Session["+obj.ToString()+"]-"+Session[obj.ToString()].ToString()+"%26lt;br%26gt;");//输出所有的Session,使用时可注释掉
}
}
%26lt;/script%26gt;
[b]asp.net转asp页面:[/b]
用一个asp.net页,把session信息写到input中,提交给asp页
[b]trans.aspx[/b]
%26lt;%@Pagelanguage="c#"%%26gt;
%26lt;scriptlanguage=C#runat=server%26gt;
privatevoidPage_Load(objectsender,System.EventArgse)
{
//----------测试数据---------
Session["name"]="srx";
Session["*"]="F";
//----------------------------
Response.Write("%26lt;formname=frmid=frmaction=aspxtoasp.aspmethod=post%26gt;");
foreach(objectobjinSession.Contents)
{
 Response.Write("%26lt;inputtype=hiddenname=’"+obj.ToString()+"’");
 Response.Write("value=’"+Session[obj.ToString()].ToString()+"’%26gt;");
}
try
{
if(Request.QueryString["DestPage"].ToString().Length%26gt;4)
{
 Response.Write("%26lt;inputtype=hiddenname=’DestPage’");
 Response.Write("value=’"+Request.QueryString["DestPage"].ToString()+"’%26gt;");
}
}
catch{}
Response.Write("%26lt;/form%26gt;");
Response.Write("%26lt;scr"+"iptlanguage=’javascript’%26gt;frm.submit();%26lt;/scr"+"ipt%26gt;");
}
%26lt;/script%26gt;
[b]aspxtoasp.asp[/b]
%26lt;%
fori=1toRequest.Form.Count
Session(Request.Form.Key(i))=Request.Form(i)
next
ifLen(Session("DestPage"))%26gt;4then
  Response.Redirect(Session("DestPage"))
endif
’----------输出所有的Session-------------
callallsession()’使用时注释掉此行代码即可
functionallsession()
Response.Write"Thereare"%26Session.Contents.Count%26"Session%26lt;I%26gt;var%26lt;/I%26gt;iables%26lt;P%26gt;"
DimstrName,iLoop
ForEachstrNameinSession.Contents’使用ForEach循环察看Session.Contents
 IfIsArray(Session(strName))then’如果Session变量是一个数组?’循环打印数组的每一个[wiki]元素[/wiki]
  ForiLoop=LBound(Session(strName))toUBound(Session(strName))
   Response.WritestrName%26"("%26iLoop%26")-"%26_
   Session(strName)(iLoop)%26"%26lt;BR%26gt;"
  Next
 Else’其他情况,就简单打印变量的值
  Response.WritestrName%26"-"%26Session.Contents(strName)%26"%26lt;BR%26gt;"
 EndIf
Next
endfunction
’--------------------------------------------
%%26gt;
页: [1]
查看完整版本: ASP和ASP.Net共享Session解决办法