【问题标题】:Cross language session variables & cookies跨语言会话变量和 cookie
【发布时间】:2012-07-23 09:00:18
【问题描述】:

为了开始用 PHP 进行编程,从 Classic ASP 开始,我决定逐步转换一个非常大的、旧的在线 ASP 项目,直到我最终完成整个事情并学习 PHP。

我遇到过大量使用会话变量和 cookie 的部分。本节附加的页面尚未转换,我有一段时间无法转换它们。在我继续转换这一部分并弄乱我所有的用户会话/访问之前,我想知道在我的 ASP 页面上设置的会话变量或 cookie 是否可以在转换后的 PHP 页面中读取,反之亦然?

我认为请求 cookie 可以,但我不确定使用会话是否有任何影响。请指教。

【问题讨论】:

    标签: php cookies asp-classic session-variables


    【解决方案1】:

    是的。

    Cookies 是服务器/头文件(用户浏览器与您的服务器通信),因此 PHP 文件和 ASP 文件将能够更改/编辑所有域 cookie(当然,假设它们位于同一个域中) )。

    【讨论】:

    • 就像 Ilyas & Lèse 在接下来的 cmets 中所说的那样,情况更加混乱。我会坚持吃饼干
    【解决方案2】:

    Alex 对 cookie 的看法是正确的;但是,会话更加棘手。会话数据存储在服务器端,不同语言的存储方式可能不同。

    但是,it is still possible 做;您只需要让两个应用程序使用相同的会话数据存储。它可能就像配置 PHP 和 ASP 以在 SQL 数据库中存储会话一样简单。但他们可能不会使用相同的格式将会话数据存储在数据库中,因此您可能最终需要为其中一个或另一个编写 custom session storage handlers

    那么您需要做的就是确保两个应用从相同的 cookie 名称读取会话 ID,因为这也因语言而异。

    【讨论】:

      【解决方案3】:

      Cookie,是的,它们将可用。

      会话,我不知道 ASP 是如何处理它的会话的,但我认为 PHP 不能直接处理它们。

      您可以在 ASP 脚本中为 PHP 创建会话文件

      研究how PHP handles sessions,并在您的会话文件夹中创建会话文件。但是,编码/序列化所有这些值可能很棘手。 PHP 会话不被 serialize() 函数序列化。他们有their own handler,这可能取决于您的配置。

      PS:会话仅持续到客户端关闭浏览器。我说当你完全克隆完脚本后不要担心它们并激活 PHP 页面。如果您想运行用两种语言编写的脚本并让它们在两种语言之间传递数据,请使用 cookie 而不是会话,因为 cookie 保存在客户端的机器上,并且可以从两个平台读取。

      【讨论】:

      • 会话不仅持续到客户端关闭浏览器(服务器无法知道浏览器何时关闭)。会话数据将持续存在,直到垃圾收集系统将其删除。对于 PHP,它基于session.gc_maxlifetime
      • 是的,你是对的。我想我可以写一个更有意义的句子。让我用“它们将继续存在于文件系统中直到 GC 销毁它们,但当客户端浏览器关闭时它们确实过期”来纠正它。 (实际上,只是客户端浏览器通常会在下次访问时获取一个新会话,因为它不知道旧会话,除非您将会话 ID 作为 URI 的一部分或另存为 cookie 等)
      • 好吧,浏览器通常会忘记会话,因为浏览器旨在丢弃没有到期日期/时间的 cookie。如果您将会话管理机制配置为设置会话 ID cookie 的到期日期,则会话可以在浏览器关闭后持续存在。虽然这通常不是我们想要的行为。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 2011-09-23
      • 2012-10-29
      • 2011-05-09
      • 2020-02-26
      相关资源
      最近更新 更多