【问题标题】:Return to a previous session id返回上一个会话 ID
【发布时间】:2012-07-14 04:48:13
【问题描述】:

我们有一个旧版 (php) 应用程序,接受文件上传,它们存储在取决于会话 ID 的路径中。现在我们必须为这个 webapp 提供一个非常简单的 API,通过 iOS api (iPad) 执行文件上传。我们返回一个 url,客户将在嵌入式 webkit 窗口中打开它。

由于上传和查看操作的会话不同,我们想获取会话参数并在文件上传的响应中返回它。然后客户端被重定向到那个 url,我们将 session id 设置为之前的 id 并继续到客户可以继续工作的页面。

显然,我尝试过的任何方法都不起作用。我们使用 Zend Framework 1,但这并不重要。我试过了:

  1. 设置 Set-Cookie 标头(这会导致 cookie 包含两个 PHPSESSID 值)
  2. 使用setcookie("PHPSESSID", $session, 3600) 设置PHPSESSID
  3. 使用带有setHeader('Set-Cookie', 'PHPSESSID=....', true) 的 Zend http 响应

最后两个选项什么都不做,就像我根本没有设置会话一样。我该如何解决这个问题?我们实际上不能过多地修改遗留代码库来修改其工作方式并更改文件上传的路径解析方式。

所以,流程是: 对 api.myapp.tld 的请求 -> 使用正文中的字符串进行响应 -> 使用此响应字符串作为位置打开 webkit 窗口 -> 执行请求 -> 带有重定向标头的响应 以及将 cookie 设置为某些内容的方法不同 -> Webkit 执行重定向 -> 客户访问的页面与对 api.myapp.tld 的第一个请求具有相同的会话 ID。

如果有其他方法可以设置会话 ID,那就太好了。

【问题讨论】:

    标签: php zend-framework session-cookies


    【解决方案1】:

    调试起来并不简单,但您有一些选择。我不熟悉 Zend Framework 1.x,所以这不是特定于框架的(框架有时会在顶部添加东西),而是特定于 PHP。

    在 PHP 中,会话由两件事来标识:

    1. Name(例如:常见的默认名称是PHPSESSID
    2. ID(即随机“数字”)

    名称允许一次使用多个会话,而 ID 则具体标识会话。

    听起来您需要并行使用两个会话 ID。我建议您将需要处理旧会话的脚本设置为与当前脚本不同的会话名称。

    然后,您可以使用另一个会话名称传入旧版/旧会话 ID,您当前的会话可以保持原样。

    我希望这些信息对您有所帮助。如果您在实施时遇到问题,请询问。

    【讨论】:

      【解决方案2】:

      我最终得到了一些更简单的东西。该会话与/path/to/location/ . $sessionId 之类的路径相关。当第二个会话开始时,我只是将目录从旧会话重命名为新会话。简单快速地完成这项工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-31
        • 2013-12-26
        • 2021-12-14
        • 1970-01-01
        • 2016-12-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多