怎样实现asp和asp.net session共享
谁有asp和asp.netsession共享的好方法,不要微软的那个新建个数据库方法,最好有点创意的,我知道有个方法是通过隐藏框架传递的,但不是太清楚,不知道哪位大侠能给...
谁有asp和asp.net session共享的好方法,不要微软的那个新建个数据库方法,最好有点创意的,我知道有个方法是通过隐藏框架传递的,但不是太清楚,不知道哪位大侠能给说说,最好带点代码,这样比较容易理解,或者哪位仁兄能给个更好的方法,你们想要多少分,只要我有,一定给,悬赏分只能选100分 就先给这么多了
别从网上找好不好? 展开
别从网上找好不好? 展开
3个回答
展开全部
在原有的asp程序中用asp.net添加功能模块,共享session是一个难点,下面介绍一种较为简洁的方法,可以在asp和asp.net中共享session会话。
登录页面使用C#重新创建,在成功登录后执行语句:
程序代码
Response.Write("<script language='javascript'>window.open('ASPXTOASP.aspx','new');</script>");
打开aspxtoasp.aspx页面,action设为aspxtoasp.asp,即可将session值post到asp页面,因为是单向传递,不用在其他页面重复执行动作,经测试,传递成功!
Aspxtoasp.aspx代码如下:
程序代码
<script language="C#" runat="server">
Response.Write( "<form name=t id=t action=ASPXTOASP.asp method=post>" );
foreach(object it in Session.Contents)
{
Response.Write("<input type=hidden name=" + it.ToString());
Response.Write( " value=" + Session[it.ToString()].ToString() + " >");
}
Response.Write("</FORM>");
Response.Write("<script>t.submit();</script>");
</script>
Aspxtoasp.asp代码如下:
程序代码
<%
for i=1 to Request.Form.Count
Session(Request.Form.Key(i))=Request.Form(i)
next
Response.End
%>
<script language="JavaScript">
window.close();
</script>
这是一个老话题了,因为最近用的到,所以没办法又到处找资料。微软的网站上提供的是用数据库实现的,总觉得太麻烦,也有说直接使用的,但我没有试成功。我认为直接使用是不可能的。还有一种方法,就是通过几个页面转换,我使用的也是这个方法,通过总结搜索到的资料,整理后编写了几个页面来转换。主要是通过隐藏的input来实现的。具体方法如下:
asp 转 asp.net 页面:
用一个asp页,把session信息写到input中,提交给asp.net页
trans.asp
程序代码
<%
’’----------测试数据--------
session("name")="srx"
session("id")="1"
session("sex")="f"
session("pass")="asdfas"
session("age")="23"
session("weight")="131"
’’--------------------------
Response.Write("<form name=frm id=frm action=""asptoaspx.aspx"" method=post >")
for each Item in Session.Contents
Response.Write("<input type=hidden name=" & Item)
Response.Write( " value=" & Session(item) & " >")
next
if len(Request.QueryString("Destpage")) >4 then
Response.Write("<input type=hidden name=DestPage value=" & Request.querystring("DestPage") & ">")
end if
Response.Write("</FORM>")
Response.Write("<scr" + "ipt>frm.submit();</scr" + "ipt>")
%>
asptoaspx.aspx
<%@ Page language="c#" %>
<script language=C# runat=server>
private void Page_Load(object sender, System.EventArgs e)
{
Session.Timeout = 60;
for(int i=0;i<Request.Form.Count;i++)
{
Session[Request.Form.GetKey(i)]=Request.Form[i].ToString();
}
allsession(); //输出所有的Session,使用时可注释掉
try
{
if( Session["DestPage"].ToString().Length >4 )
{
Server.Transfer(Session["DestPage"].ToString(),true);
}
}
catch {}
}
private void allsession()
{
Response.Write ("There are " + Session.Contents.Count +" Session <I>var</I>iables<P>");
foreach(object obj in Session.Contents)
{
Response.Write("Session["+obj.ToString()+"] - "+Session[obj.ToString()].ToString()+"<br>");//输出所有的Session,使用时可注释掉
}
}
</script>
asp.net 转 asp 页面:
用一个asp.net页,把session信息写到input中,提交给asp页
trans.aspx
程序代码
<%@ Page language="c#" %>
<script language=C# runat=server>
private void Page_Load(object sender, System.EventArgs e)
{
// ----------测试数据---------
Session["name"] = "srx";
Session["sex"]="F";
//----------------------------
Response.Write("<form name=frm id=frm action=aspxtoasp.asp method=post>");
foreach(object obj in Session.Contents)
{
Response.Write("<input type=hidden name=’"+obj.ToString()+"’");
Response.Write(" value = ’"+Session[obj.ToString()].ToString()+"’>");
}
try
{
if(Request.QueryString["DestPage"].ToString().Length > 4 )
{
Response.Write("<input type=hidden name=’DestPage’");
Response.Write(" value = ’"+Request.QueryString["DestPage"].ToString()+"’>");
}
}
catch{}
Response.Write("</form>");
Response.Write("<scr"+"ipt language=’javascript’>frm.submit();</scr"+"ipt>");
}
</script>
aspxtoasp.asp
<%
for i=1 to Request.Form.Count
Session(Request.Form.Key(i))=Request.Form(i)
next
if Len(Session("DestPage")) >4 then
Response.Redirect(Session("DestPage"))
end if
’-----------------------输出所有的Session------------------------------------------------
call allsession() ’使用时注释掉此行代码即可
function allsession()
Response.Write "There are " & Session.Contents.Count &" Session <I>var</I>iables<P>"
Dim strName, iLoop
For Each strName in Session.Contents’使用For Each循环察看Session.Contents
If IsArray(Session(strName)) then ’如果Session变量是一个数组? ’循环打印数组的每一个元素
For iLoop = LBound(Session(strName)) to UBound(Session(strName))
Response.Write strName & "(" & iLoop & ") - " & _
Session(strName)(iLoop) & "<BR>"
Next
Else ’其他情况,就简单打印变量的值
Response.Write strName & " - " & Session.Contents(strName) & "<BR>"
End If
Next
end function
’------------------------------------------------------------------------------------------
%>
登录页面使用C#重新创建,在成功登录后执行语句:
程序代码
Response.Write("<script language='javascript'>window.open('ASPXTOASP.aspx','new');</script>");
打开aspxtoasp.aspx页面,action设为aspxtoasp.asp,即可将session值post到asp页面,因为是单向传递,不用在其他页面重复执行动作,经测试,传递成功!
Aspxtoasp.aspx代码如下:
程序代码
<script language="C#" runat="server">
Response.Write( "<form name=t id=t action=ASPXTOASP.asp method=post>" );
foreach(object it in Session.Contents)
{
Response.Write("<input type=hidden name=" + it.ToString());
Response.Write( " value=" + Session[it.ToString()].ToString() + " >");
}
Response.Write("</FORM>");
Response.Write("<script>t.submit();</script>");
</script>
Aspxtoasp.asp代码如下:
程序代码
<%
for i=1 to Request.Form.Count
Session(Request.Form.Key(i))=Request.Form(i)
next
Response.End
%>
<script language="JavaScript">
window.close();
</script>
这是一个老话题了,因为最近用的到,所以没办法又到处找资料。微软的网站上提供的是用数据库实现的,总觉得太麻烦,也有说直接使用的,但我没有试成功。我认为直接使用是不可能的。还有一种方法,就是通过几个页面转换,我使用的也是这个方法,通过总结搜索到的资料,整理后编写了几个页面来转换。主要是通过隐藏的input来实现的。具体方法如下:
asp 转 asp.net 页面:
用一个asp页,把session信息写到input中,提交给asp.net页
trans.asp
程序代码
<%
’’----------测试数据--------
session("name")="srx"
session("id")="1"
session("sex")="f"
session("pass")="asdfas"
session("age")="23"
session("weight")="131"
’’--------------------------
Response.Write("<form name=frm id=frm action=""asptoaspx.aspx"" method=post >")
for each Item in Session.Contents
Response.Write("<input type=hidden name=" & Item)
Response.Write( " value=" & Session(item) & " >")
next
if len(Request.QueryString("Destpage")) >4 then
Response.Write("<input type=hidden name=DestPage value=" & Request.querystring("DestPage") & ">")
end if
Response.Write("</FORM>")
Response.Write("<scr" + "ipt>frm.submit();</scr" + "ipt>")
%>
asptoaspx.aspx
<%@ Page language="c#" %>
<script language=C# runat=server>
private void Page_Load(object sender, System.EventArgs e)
{
Session.Timeout = 60;
for(int i=0;i<Request.Form.Count;i++)
{
Session[Request.Form.GetKey(i)]=Request.Form[i].ToString();
}
allsession(); //输出所有的Session,使用时可注释掉
try
{
if( Session["DestPage"].ToString().Length >4 )
{
Server.Transfer(Session["DestPage"].ToString(),true);
}
}
catch {}
}
private void allsession()
{
Response.Write ("There are " + Session.Contents.Count +" Session <I>var</I>iables<P>");
foreach(object obj in Session.Contents)
{
Response.Write("Session["+obj.ToString()+"] - "+Session[obj.ToString()].ToString()+"<br>");//输出所有的Session,使用时可注释掉
}
}
</script>
asp.net 转 asp 页面:
用一个asp.net页,把session信息写到input中,提交给asp页
trans.aspx
程序代码
<%@ Page language="c#" %>
<script language=C# runat=server>
private void Page_Load(object sender, System.EventArgs e)
{
// ----------测试数据---------
Session["name"] = "srx";
Session["sex"]="F";
//----------------------------
Response.Write("<form name=frm id=frm action=aspxtoasp.asp method=post>");
foreach(object obj in Session.Contents)
{
Response.Write("<input type=hidden name=’"+obj.ToString()+"’");
Response.Write(" value = ’"+Session[obj.ToString()].ToString()+"’>");
}
try
{
if(Request.QueryString["DestPage"].ToString().Length > 4 )
{
Response.Write("<input type=hidden name=’DestPage’");
Response.Write(" value = ’"+Request.QueryString["DestPage"].ToString()+"’>");
}
}
catch{}
Response.Write("</form>");
Response.Write("<scr"+"ipt language=’javascript’>frm.submit();</scr"+"ipt>");
}
</script>
aspxtoasp.asp
<%
for i=1 to Request.Form.Count
Session(Request.Form.Key(i))=Request.Form(i)
next
if Len(Session("DestPage")) >4 then
Response.Redirect(Session("DestPage"))
end if
’-----------------------输出所有的Session------------------------------------------------
call allsession() ’使用时注释掉此行代码即可
function allsession()
Response.Write "There are " & Session.Contents.Count &" Session <I>var</I>iables<P>"
Dim strName, iLoop
For Each strName in Session.Contents’使用For Each循环察看Session.Contents
If IsArray(Session(strName)) then ’如果Session变量是一个数组? ’循环打印数组的每一个元素
For iLoop = LBound(Session(strName)) to UBound(Session(strName))
Response.Write strName & "(" & iLoop & ") - " & _
Session(strName)(iLoop) & "<BR>"
Next
Else ’其他情况,就简单打印变量的值
Response.Write strName & " - " & Session.Contents(strName) & "<BR>"
End If
Next
end function
’------------------------------------------------------------------------------------------
%>
参考资料: http://www.cnblogs.com/moper/archive/2008/03/21/1116796.html
展开全部
Session共享的解决方案
1、客户端SessionID值唯一;
对于不同的域名:主域名、子域名、跨站点域名或跨服务器域名,用户在打开页面时会产生不同的SessionID,
为了使这些站点在用户登录时只登录一次,那我们就要解决SessionID的问题,必须使SessionID在这些共享Session的站点中只产生一次。而SessionID是存储在客户端的cookie之中键值为ASP.NET_SessionId的一个字符串(也可以存储在URL中,这里不作使介绍),为此只须使各站点存储的SP.NET_SessionId唯一即可。
因每个客户端在打开时会产生一个SessionID,为此我们要做的就是重置SessionID。我们可以在继承HttpModule,在结束请求时重写SessionID
代码:
public class MakeSessionIDOneOnly : IHttpModule
{
private string m_RootDomain = string.Empty;
public void Dispose()
{
}
public void Init(HttpApplication context)
{
m_RootDomain = ConfigurationManager.AppSettings["RootDomain"];
Type stateServerSessionProvider = typeof(HttpSessionState).Assembly.GetType("System.Web.SessionState.OutOfProcSessionStateStore");
FieldInfo uriField = stateServerSessionProvider.GetField("s_uribase", BindingFlags.Static | BindingFlags.NonPublic);
if (uriField == null)
throw new ArgumentException("UriField was not found");
uriField.SetValue(null, m_RootDomain);
context.EndRequest += new System.EventHandler(context_EndRequest);
}
void context_EndRequest(object sender, System.EventArgs e)
{
HttpApplication app = sender as HttpApplication;
for (int i = 0; i < app.Context.Response.Cookies.Count; i++)
{
if (app.Context.Response.Cookies[i].Name == "ASP.NET_SessionId")
{
app.Context.Response.Cookies[i].Domain = m_RootDomain;
}
}
}
}
为使用以上代码,须配置下面节点项。
<httpModules>
<add name="节点名称" type="类名全称, 程序集"/>
</httpModules>
1、客户端SessionID值唯一;
对于不同的域名:主域名、子域名、跨站点域名或跨服务器域名,用户在打开页面时会产生不同的SessionID,
为了使这些站点在用户登录时只登录一次,那我们就要解决SessionID的问题,必须使SessionID在这些共享Session的站点中只产生一次。而SessionID是存储在客户端的cookie之中键值为ASP.NET_SessionId的一个字符串(也可以存储在URL中,这里不作使介绍),为此只须使各站点存储的SP.NET_SessionId唯一即可。
因每个客户端在打开时会产生一个SessionID,为此我们要做的就是重置SessionID。我们可以在继承HttpModule,在结束请求时重写SessionID
代码:
public class MakeSessionIDOneOnly : IHttpModule
{
private string m_RootDomain = string.Empty;
public void Dispose()
{
}
public void Init(HttpApplication context)
{
m_RootDomain = ConfigurationManager.AppSettings["RootDomain"];
Type stateServerSessionProvider = typeof(HttpSessionState).Assembly.GetType("System.Web.SessionState.OutOfProcSessionStateStore");
FieldInfo uriField = stateServerSessionProvider.GetField("s_uribase", BindingFlags.Static | BindingFlags.NonPublic);
if (uriField == null)
throw new ArgumentException("UriField was not found");
uriField.SetValue(null, m_RootDomain);
context.EndRequest += new System.EventHandler(context_EndRequest);
}
void context_EndRequest(object sender, System.EventArgs e)
{
HttpApplication app = sender as HttpApplication;
for (int i = 0; i < app.Context.Response.Cookies.Count; i++)
{
if (app.Context.Response.Cookies[i].Name == "ASP.NET_SessionId")
{
app.Context.Response.Cookies[i].Domain = m_RootDomain;
}
}
}
}
为使用以上代码,须配置下面节点项。
<httpModules>
<add name="节点名称" type="类名全称, 程序集"/>
</httpModules>
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最简单的方法:
1.做两个中转Session的页面,分别为asp页面和asp.net的页面
2.由asp页面跳转到asp.net页面的时候,通过先到asp中转页面将session以get或者form的方式传递给asp.net中转页面,asp.net中转页面将其存好。
3.由asp.net跳转到asp页面的时候思路同上
1.做两个中转Session的页面,分别为asp页面和asp.net的页面
2.由asp页面跳转到asp.net页面的时候,通过先到asp中转页面将session以get或者form的方式传递给asp.net中转页面,asp.net中转页面将其存好。
3.由asp.net跳转到asp页面的时候思路同上
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询