【问题标题】:Zend Auth locked sessionZend Auth 锁定会话
【发布时间】:2010-09-21 13:45:24
【问题描述】:

我对 Zend 处理会话的方式几乎感到沮丧。

这是我的情况。我编写了一个身份验证插件,该插件始终检查用户凭据是否使用 Zend_Auth。当从 zend auth 调用 hasIdentity 函数时,它会自动启动会话。

当我需要执行一个很长的过程时,问题就来了。会话将锁定请求,直到请求完成。我尝试通过调用 Zend_Session::writeClose(false) 来释放锁,因此可以执行另一个请求。 但我无法再次开始会议。

如果我尝试恢复已停止的会话,这是一个糟糕的实现吗?

从开始到请求执行结束只有一个会话?

谢谢。

ps:我可以在这里做一些小技巧。在 auth 插件结束时,我编写了一个原生 php 函数 (session_write_close),如果任何控制器需要再次使用会话,我将使用 (session_start) 再次启动它。

【问题讨论】:

  • 您是否锁定了请求?还是采埃孚自己做的?
  • 当我从 zend auth 类调用 hasIdentity() 时,ZF 会自动调用 session_start。 session_start 将锁定会话数据,直到脚本完成。
  • ¿你有没有找到一个“好的解决方案”?我遇到了同样的问题。
  • 我认为唯一的“其他”解决方案是使用“非锁定”会话处理程序(数据库?Memcache?)
  • 在引导文件中试试这个 register_shutdown_function(array('Zend_Session', 'writeClose'), true);

标签: php zend-framework session zend-auth zend-session


【解决方案1】:

解决此问题的最简单方法是使用数据库进行会话存储。无需担心文件锁(正如 ArneRie 所说)。

选项 1

使用一个常见的 PHP 扩展并对 php.ini 进行微调:

例如,您可以将它们存储在 NFS 导出或使用 SQL 后端重新编码 session_set_save_handler。但是没有比使用 memcached 更高效、更具可扩展性、更高性能和更易于部署的解决方案了……

教程:http://www.dotdeb.org/2008/08/25/storing-your-php-sessions-using-memcached/

选项 2

Zend 方式,通过 Zend_Session_SaveHandler_DbTable。

示例: Zend - Storing Session data in a database

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-27
    • 2018-05-01
    • 2018-05-07
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 2014-01-29
    相关资源
    最近更新 更多