【问题标题】:How do I read server data from a Catalyst::Plugin::Session::Store::File from another app?如何从另一个应用程序的 Catalyst::Plugin::Session::Store::File 读取服务器数据?
【发布时间】:2012-02-16 08:41:05
【问题描述】:

我正在我的服务器上运行两个应用程序。第一个是 Catalyst 应用,配置为使用 Session / Session::State::Cookie / Session::Store::File 插件套件在服务器端保存一些会话状态。

另一个应用程序使用 Perl,但不是 Catalyst。我希望来自 Catalyst 应用的服务器端会话数据可供其他应用使用。

在第二个应用程序中,我可以加载客户端 cookie 并找到 Catalyst 应用程序的相关会话 ID,但之后我就卡住了。我不知道如何将会话 ID 映射到文件名。例如,我有一个会话 ID de079f151917d184219ef357f5298d0da478e015,但该会话的数据只能在名为 fc1f6f651a2313c4081bcfef679061be35de40b7 的文件中找到。非 Catalyst 应用程序应该如何知道如何找到该文件? (我的后续问题是非 Catalyst 应用程序应该如何读取该文件,但当我到达该文件时我可以跨过那座桥)。

有没有更简单的方法来使用不同的存储方案,如 Session::Store::DBICSession::Store::FastMmap

【问题讨论】:

    标签: perl session catalyst


    【解决方案1】:

    如果可以的话,我会将会话存储切换到数据库,那么就不需要搜索文件了。

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      Session::Store::File 使用Cache::FileCache。只需用cache_root 实例化一个Cache::FileCache,对应于您的应用程序放置其会话数据的位置,然后使用$cache->get("session:$sessid") 获取给定$sessid 的会话数据,如果需要,使用$cache->get("expires:$sessid") 获取到期时间,以便您可以在会话到期之前忽略 time()

      【讨论】:

      • 谢谢@hobbs,这个答案为我节省了数小时的进一步研究。我还需要在Cache::FileCache 构造函数中设置namespace 参数,这需要一些尝试和错误才能正确。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      • 1970-01-01
      • 2015-08-15
      • 2015-11-26
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      相关资源
      最近更新 更多