4

我正在编写一个需要与 ASP.NET 登录集成的 PHP 脚本(它恰好是在 Sitecore 上构建的,不确定这是否重要)。我需要复制生成/登录/加密会话和数据 cookie 的能力,还需要通过检测/解密会话和数据 cookie 来检测用户是否登录。PHP 和 ASP 脚本可以共享同一个 MS SQL 数据库并且位于同一个文件系统上,所以这不是问题。我的大部分问题都只是在 PHP 中设置/读取 ASP cookie。

我有 2 个由 ASP.NET 设置的 cookie,

ASP.NET_SessionId 和 .ASPXAUTH

我相信 ASP.NET_SessionId 显然是用于会话的,而 .ASPXAUTH 是用于数据的。

我的问题是:

  • 我相信,为了知道是否有人通过 ASP 会话登录(或登录),在 PHP 中,我需要将会话数据与存储在文件系统上的会话进行比较,是否有人知道在哪里(或是什么决定了它们的位置?
  • 有人知道用于加密/解密 ASPXAUTH cookie 的算法吗? 我知道标准的“加密”和“解密”方法,但我想知道使它们精确运行的代码。 IE 是否首先是某种数据数组,然后对其进行加盐和哈希处理?输出的字节是否需要移位/转换?如果是这样,以什么顺序/方式?

我感谢任何帮助,我将在接下来的几天内为最有帮助回答这些问题的人奖励答案。

目前我已经能够通过 PHP 中的 setcookie() 重现 cookie 生成。也就是说,我可以通过 ASP.NET 应用程序登录,获取 cookie 数据,将其插入 PHP 应用程序并通过 ASP.NET 应用程序注销。对于那些要捉弄我的人,我很清楚这是可能的,我不需要解释我为什么要这样做,但这需要很多时间、金钱和原因,所以是的,我确实需要同时使用PHP 和 ASP.NET。

谢谢!

更新

我相信我能够使用这个答案部分解密 cookie:https : //stackoverflow.com/a/988018/775586 有人知道如何完成它吗?

4

2 回答 2

2

我相信,为了知道是否有人通过 ASP 会话登录(或登录),在 PHP 中,我需要将会话数据与存储在文件系统上的会话进行比较,是否有人知道在哪里(或什么确定在哪里)这些位于?

文件系统上无处可去。默认情况下,ASP.NET 将会话数据存储在应用程序域的内存中。所以你可以简单地忘记从 PHP 访问这部分内存。您可以选择其他模式,允许您在进程外(在专用 Windows 服务中)或 SqlServer 中存储 ASP.NET 会话数据。有关不同 ASP.NET 会话模式的更多信息,我邀请您阅读以下文章

有人知道用于加密/解密 ASPXAUTH cookie 的算法吗?IE 是否首先是某种数据数组,然后对其进行加盐和哈希处理?如果是这样,以什么顺序/方式?

它使用FormsAuthentication.EncryptDecrypt方法。它们反过来使用您在 web/machine.config 文件的 machineKey 部分中定义的任何算法和密钥。有关表单身份验证如何在 ASP.NET 中工作的更多信息,我邀请您阅读以下文章

于 2012-07-03T17:52:15.553 回答
2

好吧,第一个问题...

  • ASP 不存储在原始文件系统中,但如果配置正确并且您可以指定存储位置,则可以将会话数据存储在数据库中。从我记得读过的内容来看,这是在一个名为“tempdb”的数据库中,或者一个可能也有一些存储过程的数据库中。在此处以更简单的英语了解更多信息:http: //www.codeproject.com/Articles/104082/Configuring-ASP-session-state-on-SQL-server

对于第二个也是更重要的问题:

http://www.codeproject.com/KB/aspnet/Forms_Auth_Internals/image001.jpg

于 2012-07-06T12:33:49.843 回答