处理经典 ASP 和 ASP.NET Web 应用程序之间的会话变量问题






4.44/5 (10投票s)
一种处理经典 ASP 和 ASP.NET Web 应用程序之间会话变量问题的解决方案。
引言
在本文中,我将讨论如何在经典 ASP 网站和 ASP.NET 网站之间创建桥梁。如果您尝试将网站从经典 ASP 3.0 迁移到较新的 ASP.NET,但将某些功能保留在经典 ASP 网站中,而将某些功能保留在较新的 .NET 版本中,那么在维护会话变量时会遇到麻烦。
您会发现,浏览器为经典 ASP 3.0 和 ASP.NET 创建了两个不同的会话容器。 即使它们位于同一服务器上,浏览器也会区别对待它们。 因此,当您想在这两种技术之间共享会话变量时,您不能简单地通过 Web 浏览器来实现。 有几种解决此问题的方法。 使用数据库涉及很多复杂性。 所以,我更愿意不走那条路。 在这里,我尝试使用 cookie 来解决这个问题。 我还没有找到比这更好的解决方案。 如果您有更好的答案,请随时纠正我。 我会欣然接受您的建议。
背景
有时,我们需要将经典 ASP 中的 Web 应用程序与新的 ASP.NET 版本一起保留。 在这种情况下,会话变量是一个关键因素,因为浏览器将变量处理为两个不同应用程序的不同会话变量。我们需要一些机制来以简单的方式克服这个问题。
使用代码
在您做任何事情之前,您必须考虑 Web 应用程序的流程。 我的意思是,您必须考虑您的应用程序何时从经典 ASP 跳转到新的 ASP.NET 页面。 一旦你做出判断,你就准备好了。 您可以在 Web 应用程序的任何时间点创建会话变量。 创建一个 ASP 页面,为您的 ASP.NET 页面创建 cookie 变量。
Session_to_cookies.asp 页面如下所示。
<%
If Session("loginValid")<>"true" Then
Response.Redirect "adminlogin.asp"
End IF
Response.Cookies("sessionInfo")("LoggedUserID")= Session("LoggedUserID")
Response.Cookies("sessionInfo")("LoggedfirstName")= Session("LoggedfirstName")
Response.Cookies("sessionInfo")("LoggedlastName")= Session("LoggedlastName")
Response.Cookies("sessionInfo")("loginValid")= Session("loginValid")
%>
每当您的应用程序进行跳转时,页面将被重定向到这个新创建的页面,该页面将为用户必需的会话变量创建 cookie。 这些 cookie 随后将被 ASP.NET 获取。 使用这些 cookie,根据浏览器的要求为 ASP.NET 创建新的会话变量。
以下用于您的母版页的代码有助于设置会话并删除 cookie
public partial class masterPage : System.Web.UI.MasterPage
{
protected void Page_Init(object sender, EventArgs e)
{
if (Session["loginValid"] == null)
{
if (Request.Cookies["sessionInfo"] != null)
{
HttpCookie myCookie = Request.Cookies.Get("sessionInfo");
myCookie.Name = "sessionInfo";
Session["loginValid"] =
Convert.ToBoolean(myCookie["loginValid"].ToString());
Session["LoggedUserID"] =
Convert.ToInt32(myCookie["LoggedUserID"].ToString());
myCookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(myCookie);
}
else
{
Response.Redirect("../session_to_cookies.asp");
}
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (Session["loginValid"] == null)
{
if (Request.Cookies["sessionInfo"] != null)
{
HttpCookie myCookie = Request.Cookies.Get("sessionInfo");
myCookie.Name = "sessionInfo";
Session["loginValid"] =
Convert.ToBoolean(myCookie["loginValid"].ToString());
Session["LoggedUserID"] =
Convert.ToInt32(myCookie["LoggedUserID"].ToString());
myCookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(myCookie);
}
else
{
Response.Redirect("../session_to_cookies.asp");
}
}
}
}
一旦创建了这些会话变量,请使用 ASP.NET 删除 cookie。 每次进行跳转时,都应将其重定向到为会话变量设置 cookie 的页面。 然后可以在 ASP.NET 页面上检查 Cookie 值,然后可以根据需要直接删除 cookie 或为其创建会话。