【问题标题】:Persist Session from ASP.NET to PHP从 ASP.NET 到 PHP 的持久会话
【发布时间】:2012-02-09 03:54:52
【问题描述】:

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

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

会话名称是“CUSTOMER_LOGGED_IN”。

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

有人可以帮忙吗?

非常感谢您的任何指点。

【问题讨论】:

  • 您忘了说的最重要的部分是:这些应用程序是否托管在同一网站、同一服务器、不同/删除服务器、同一网络上?他们可以访问同一个数据库或另一个共享资源/服务器吗?在它们之间建立某种信任并维护两组不同的会话数据可能会更简单。
  • 抱歉耽搁了。它们位于同一网站、服务器和网络上。

标签: php asp.net session cookies


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    • 在 asp.net 上登录用户。您可以使用 asp.net 中内置的会话机制,也可以手动完成。会话只是通过一些令牌绑定到客户端的数据存储。因此,您的会话初始化将为您提供一些身份验证令牌,这些令牌需要在客户端作为 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 上也有可能——这意味着,他可以解释会话 ID随意出现在会话 cookie 中;那么如果有 2 个会话 cookie 怎么办(如果必须这样的话)...
    • msdn.microsoft.com/en-us/library/aa479313.aspx - 这个在经典 asp 和 asp.net 之间共享会话的示例可能很有用。
    【解决方案3】:

    最好的办法是在 proc session 之外,它将会话信息存储在 ASP.NET 和 PHP 都可以访问的外部存储(例如 sql 数据库)中。

    【讨论】:

    • 当然,这需要您编写一些知道如何从外部存储中检索会话数据的 php 代码。 PHP 本身不会这样做。
    • 同样,您必须使用任何语言来执行此操作。如果您将代码放在存储过程中,您可以跨语言重用这些代码。
    【解决方案4】:

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

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

    【讨论】:

    • 如果你在cookie中放了很多数据,浏览器可能会崩溃,或者删除它们,加载它们的延迟很大,忘记cookie来交换数据。
    • 我说作为一种传递数据的方式,而不是 100% 使用它,一旦它到达 php,他可以将其存储为 php 会话数据。
    • 如果我在 $_POST 中传递 CustomerID,是否可以存储它?所以,比如说,if (isset($_POST['CUSTOMER_LOGGED_IN'])) { $fname = $_POST['CUSTOMER_LOGGED_IN']; $_SESSION['CUSTOMER_LOGGED_IN'] = $fname; } //$fname stores detail
    • 你可以,但那样会很不安全。如果您想做类似的事情,我会改为这样做。我会创建一个传递页面,用户转到该页面,然后该页面在后台使用 cURL 连接到 php URL 并为用户创建会话并将会话 ID 返回到 ASP 页面。获得会话 ID 后,将其作为查询字符串的一部分传回 PHP 页面。由于 sessionID 不是单个数字而是随机字符串,因此通过查询字符串传递会更安全。
    • 虽然在阅读了其他 cmets 之后,数据库可能是执行此操作的更佳方式。 PHP 可以使用数据库进行会话存储,您可以创建一个表来存储您的 php 会话并编写代码来告诉 ASP 如何修改它。由于它只是一个序列化的字符串,它应该相当容易。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 2017-09-08
    • 2013-05-10
    相关资源
    最近更新 更多