我一直在討論關於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