3

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

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

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

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

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

谢谢。

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

4

1 回答 1

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 - 在数据库中存储 Session 数据

于 2012-03-10T10:29:45.493 回答