返回上一个会话ID

时间:2012-07-09 15:57:04

标签: php zend-framework session-cookies

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

由于上传和查看操作的会话不同,我们想抓住会话参数并将其从文件上传的响应中返回。然后客户端被重定向到该URL,我们将会话ID设置为先前的id并继续到客户可以继续工作的页面。

显然,我没有尝试过任何作品。我们使用Zend Framework 1,但这并不重要。我试过了:

  1. 设置Set-Cookie标头(这会产生包含两个PHPSESSID值的Cookie)
  2. 使用setcookie("PHPSESSID", $session, 3600)设置PHPSESSID
  3. 使用Zend http Reponse和setHeader('Set-Cookie', 'PHPSESSID=....', true)
  4. 最后两个选项没有做任何事情,比如我根本没有设置会话。我怎么解决这个问题?实际上,我们无法触及遗留的代码库,以修改其工作方式并更改路径解析的方式,以便上传文件。

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

    如果有替代方法来设置会话ID,那就太棒了。

2 个答案:

答案 0 :(得分:0)

调试并不简单,但你有一些选择。我不熟悉Zend Framework 1.x,所以这不是特定于框架的(框架有时候会添加内容),但是特定于PHP。

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

  1. Name(例如:常见默认名称为PHPSESSID
  2. ID(即随机“数字”)
  3. 名称允许一次使用多个会话,而ID标识特定会话。

    听起来有点需要并行使用两个会话ID。我建议你让需要处理遗留会话的脚本有一个比你当前脚本更多的会话名称。

    然后,您可以使用其他会话名称​​传递旧/旧会话ID,而当前会话可以保持原样。

    我希望这些信息有用。如果你有问题要实现,请询问。

答案 1 :(得分:0)

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