【发布时间】:2011-07-12 00:42:09
【问题描述】:
我一直在讨论关于 nonce 生成和 PHP 的各种问题,但没有找到任何关于管理 nonce 的“once”方面的细节的讨论。
这是我的情况。
我有一些 PHP 需要访问 web 服务,并且对 web 服务的请求需要我的 PHP 生成一个 nonce 并签署请求(即,我没有从 web 服务请求 nonce)。这部分很简单。
我正在努力寻找一个好的解决方案来防止在可能有多个会话进行时重复使用随机数。
在我看来,我可以做三件事。
一个,是在数据库中存储随机数/时间戳对,然后实现逻辑来检查数据库是否存在现有随机数,使旧随机数过期等。这也需要TRANSACTION或LOCK TABLE线程安全。呸。
二,是将 nonce 存储在 store 中,将 nonce 存储在 APC 中(在我的情况下不能使用 memcached),并让 TTL 处理过期。在这种情况下,线程安全是否需要将逻辑包装在 sem_acquire() / sem_release() 中,或者 apc_add() 是否真的是线程安全的?我主要关心的是如果apc_add() 或apc_store() 因为缓存已满而实际失败,如何处理这种情况。
三、是用Cache_Lite代替APC。
还有其他选择吗?据我所知,OpenID 使用 Cache_Lite 管理随机数,所以我怀疑这是最好的解决方案,但我想在提交之前检查所有选项。
谢谢。
【问题讨论】: