从ASP.NET到PHP的持久会话


Persist Session from ASP.NET to PHP

我有一个ASP.NET登录表单,它在成功登录时创建一个会话。它使用POST。

我想在PHP端检索这个会话数据,但不确定如何实现。

会话名称为"CUSTOMER_LOGGED_IN"。

我在PHP模板的头中使用"session_start()"来持久化会话,它确实这样做了,但我不确定如何在PHP模板中显示会话数据。

有人能帮忙吗?

非常感谢你的指点。

正如前面提到的,您不能直接访问会话。cookie或文件系统的替代方案是数据库,因为您不需要在客户端存储任何数据,也不需要处理向文件系统读取/写入文件的问题。

这个问题还有其他一些好的解决办法。

您没有注意到会话是由服务器端语言实现的。asp.net中的会话管理将与php实现不同。您需要设计一些共享会话数据的机制,可能通过身份验证cookie和共享服务器端会话存储。

您需要找到一种方法来告诉asp.net和php用户拥有什么会话令牌。理论上你会

  • 将用户登录到asp.net。您可以使用asp.net中内置的会话mecahnism,也可以手动完成所有操作。会话只是用一些令牌绑定到客户端的数据存储。因此,您的会话初始化将为您提供一些身份验证令牌,这些令牌需要作为cookie在客户端可用
  • 将会话数据存储在php和asp.net实现都可以访问的地方,使用会话id对其进行索引
  • 将令牌传递回php实现(通过客户端cookie)
  • 手动或通过在php中自定义会话机制从共享会话存储加载数据

我不得不承认这并不容易。不管怎样,我认为分享这些信息是一种努力。我对php的理解比对asp.net的理解要多,但这些概念可以翻译。在php中,您可以使用session_set_save_handler()功能来描述会话的工作方式。这将允许您从数据库中存储和检索会话,这是您将要做的基本工作。

在共享主机上,出于安全目的,我经常将会话存储在数据库中。理想情况下,如果可以避免的话,你不想在每次请求时都联系远程数据库,这就是为什么我只将它用于很少用户的管理后端功能。有一些关于如何实现这一点的教程,可以定制为使用不同的保存机制

参见:

http://www.devshed.com/c/a/PHP/Storing-PHP-Sessions-in-a-Database/

您还可以考虑在asp.net端加密您想要的所有会话数据,将这些数据作为cookie存储在客户端,然后让php通过解密加密的cookie来创建自己的会话。您必须小心使用这类方法,对于php和asp.net访问,它当然应该通过https。

你根本没有提到任何关于域的内容。如果您希望在远程位置进行身份验证,这有点类似于CAS身份验证。

我希望这对你有所帮助,至少可以指出你的目标。也许已经这样做的人能够提供更具体的建议。

最好的选择是进程外会话,它将会话信息存储在ASP.NET和PHP都可以访问的外部存储(如sql数据库)中。

ASP和PHP存储会话不同,因此您无法直接访问它们。您可以在cookie中加密会话数据,并使用碎片机密将cookie传递给php。

唯一的另一种方法是,如果他们共享一个文件系统,你可以用ASP写入文件系统,然后用PHP读取,但如果双方都需要写入相同的会话数据,这可能会变得一团糟。所以我真的不建议在这种情况下这样做。