我一直在讨论关于nonce生成和PHP的各种问题,但没有发现关于管理nonce的“once”方面的细节的任何讨论。在Apache/PHP中管理临时数据
这是我的情况。
我有一些PHP需要访问一个web服务,并且请求web服务需要我的PHP生成一个随机数并签名请求(即,我没有请求来自web服务的随机数)。这部分很容易。
我正在努力寻找一种很好的解决方案,以防止在可能出现多个会话时重用随机数。
正如我所看到的,我可以做三件事。
一个是将随机数/时间戳对存储在数据库中,然后执行逻辑来检查数据库中是否存在现时,过期等。这还需要TRANSACTION
或LOCK TABLE
以确保线程安全。呸。
二,是存储nonces在APC(无法在我的情况下使用memcached),并让TTL处理到期。在这种情况下,线程安全是否需要在sem_acquire()
/sem_release()
中包装逻辑或者是apc_add()
真正的线程安全?我主要关心的是如何处理这种情况,如果apc_add()
或apc_store()
实际上因缓存已满而失败。
三,是用Cache_Lite代替APC。
还有其他的选择吗?据我所知,OpenID使用Cache_Lite管理随机数,所以我怀疑这是最好的解决方案,但是我想在提交之前检查所有选项。
谢谢。
谢谢。我没有想到这种方法。 – mpdonadio 2011-03-10 13:42:52
你会推荐'date_consumed'作为'DATETIME'或'TIMESTAMP'吗? – binnyb 2015-09-01 14:42:28