从ASP.NET到PHP的持久会话

时间:2012-02-08 18:37:55

标签: php asp.net session cookies

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

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

会话名称为“CUSTOMER_LOGGED_IN”。

我在我的PHP模板的标题中使用'session_start()来持久保存会话,它确实,但我不确定如何在我的PHP模板中显示会话数据。

有人可以帮忙吗?

非常感谢任何指示。

4 个答案:

答案 0 :(得分:3)

如同提及的那样,您无法直接访问会话。 cookie或文件系统的替代方案是数据库,因为您不需要存储任何数据客户端,也不需要处理文件系统的读/写文件。

This问题有一些其他好的解决方案。

答案 1 :(得分:3)

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

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

  • 在asp.net上登录用户。您可以使用asp.net内置的会话mecahnisms或手动完成所有操作。会话只是与具有一些令牌的客户端绑定的数据存储。因此,您的会话初始化将为您提供一些身份验证令牌,这些令牌需要在客户端以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身份验证。

我希望这有点帮助,至少在指出你的目标是什么。也许已经完成此任务的人将能够提供更具体的建议。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

你最好的选择是将会话信息存储在一个外部存储器中,例如sql数据库,ASP.NET和PHP都可以访问它。