gpt4 book ai didi

asp.net - 经典 ASP 和 ASP.NET 之间的 session 丢失

转载 作者:行者123 更新时间:2023-12-04 06:53:39 25 4
gpt4 key购买 nike

我工作的公司正在为我们的 Intranet 软件在经典 ASP 程序和 ASP.NET 程序之间进行转换。最终,一切都将用 ASP.NET 编写,但由于时间限制,仍然有许多程序使用经典的 ASP。

作为补偿,我们编写了允许在经典 ASP 程序和 ASP.NET 程序之间进行重定向和自动登录的功能。不过,我已经开始看到一个问题,即为我们的 ASP.NET 软件保持 session 状态。如果用户使用 ASP.NET 程序,然后确实在经典 ASP 程序中工作,然后返回到该 ASP.NET 程序,通常情况下,用户对 ASP.NET 程序的身份验证仍然存在,但用户的 session 丢失,每当在程序中执行函数时都会导致错误。

我试图在 global.asax 的 Session_End 中捕获 session 状态的丢失。事件,这会将用户重定向到登录页面,但这没有奏效。有没有其他人遇到过用户在经典 ASP 和 ASP.NET 之间来回移动并丢失 session 的类似问题?这甚至是我真正的问题吗?这是我唯一能看到的问题。

编辑

这就是我们将用户从经典的 asp 页面重定向到 ASP.NET 页面的方法。

我们根据用户 ID 和日期创建一个 MD5 哈希,并通过查询字符串将其发送到 redirect.aspx 页面。从那里,aspx 页面根据 userId 和日期创建自己的 MD5,两者都通过查询字符串传递。如果 2 个哈希值相同,则用户通过身份验证,程序加载。这是一个例子:

经典 ASP:

strDate = Year(Now())  & right("0" & Month(Now()), 2) & right("0" & Day(Now()), 2)
key = MD5(SessionUserID & strDate)
Response.Redirect "/redirect.aspx?key="&key&"&lpid="&ProgramID&"&unum="&SessionUserNum&"&uid="&SessionUserID&"&gid="&SessionGroupID

重定向.aspx:
string key = Request.QueryString["key"];
//SetDesignModeState Variables:
if (getMd5Hash(Request.QueryString["uid"] + DateTime.Today.ToString("yyyyMMdd")) == key)
{
Session["SessionGroupID"] = Request.QueryString["gid"];
Session["SessionUserNum"] = Request.QueryString["unum"];
Session["SessionUserID"] = Request.QueryString["uid"];
string appID = Request.QueryString["lpid"];
FormsAuthentication.SetAuthCookie(Request.QueryString["uid"], false);
//redirect to ASP.NET page...

最佳答案

我对您做了类似的事情:将用户从旧版 ASP 应用程序验证到 ASP.NET 站点。如果您可以提供更多详细信息(也许是示例代码),那么您设置的流程会有所帮助,以便让从旧版应用程序到 ASPX 应用程序的用户执行此操作。

为了给你一个简短的想法,在我的实现中,我做了以下事情:

  • 创建一个 .ASPX 页面
  • .ASPX 页面仅接受来自特定旧版 ASP 应用程序的 HTTP POST 值。
  • 当收到 POST 请求时,我提取用户名/密码值,然后继续以正常方式进行身份验证。如果用户成功通过身份验证,我们会向用户发出 FormsAuthentication cookie。

  • 实际上,我的实现要复杂得多,使用数据库作为后备存储(因为两个应用程序共享一个公共(public)数据源)和一个特定的数据库字段来存储从经典应用程序发送到 .NET 的随机代码进一步验证 .NET 应用收到的请求是否有效。

    编辑:

    尝试手动设置您的身份验证 cookie。删除行:
    FormsAuthentication.SetAuthCookie(Request.QueryString["uid"], false); 

    用。。。来代替:
    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
    Request.QueryString["uid"],
    DateTime.Now,
    DateTime.Now.AddHours(24),
    false,
    null)

    string encryptedTicket = FormsAuthentication.Encrypt(ticket);
    HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
    HttpContext.Current.Response.Cookies.Add(cookie);

    看看你是怎么处理的?

    关于asp.net - 经典 ASP 和 ASP.NET 之间的 session 丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2774040/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com