永发信息网

怎样实现asp和asp.net session共享

答案:3  悬赏:40  手机版
解决时间 2021-01-08 05:03
  • 提问者网友:蓝莓格格巫
  • 2021-01-07 22:18
怎样实现asp和asp.net session共享
最佳答案
  • 五星知识达人网友:千杯敬自由
  • 2021-01-07 23:08
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;
}
}
}
}
为使用以上代码,须配置下面节点项。





全部回答
  • 1楼网友:轻雾山林
  • 2021-01-08 00:49
路过,暂时保留意见!
  • 2楼网友:忘川信使
  • 2021-01-08 00:37
最简单的方法:
1.做两个中转Session的页面,分别为asp页面和asp.net的页面
2.由asp页面跳转到asp.net页面的时候,通过先到asp中转页面将session以get或者form的方式传递给asp.net中转页面,asp.net中转页面将其存好。
3.由asp.net跳转到asp页面的时候思路同上
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯