ここでナンスの生成と PHP に関するさまざまな質問を調べてきましたが、ナンスの「一度」の側面を管理する詳細についての議論は見つかりませんでした。
これが私の状況です。
Web サービスにアクセスする必要がある PHP がいくつかあり、Web サービスへの要求では、PHP が nonce を生成して要求に署名する必要があります (つまり、web サービスから nonce を要求していません)。その部分は簡単です。
複数のセッションが進行している可能性がある場合にナンスの再利用を防ぐための良い解決策に苦労しています。
そう考えると、私にできることは3つあります。
1 つは、nonce/timestamp のペアをデータベースに保存し、データベースで既存の nonce をチェックし、古い nonce を失効させるなどのロジックを実装することです。これには、スレッド セーフのためにTRANSACTION
orも必要です。LOCK TABLE
うん。
2 つ目は、ノンスを APC のストアに保存し (私の場合は memcached を使用できません)、TTL に有効期限を処理させることです。この場合、スレッドセーフにはロジックをラップする必要がありますか、またはsem_acquire()
本当にスレッドセーフですか? これに関する私の主な関心事は、キャッシュがいっぱいであるために実際に失敗した場合に状況を処理する方法です。sem_release()
apc_add()
apc_add()
apc_store()
3 つ目は、APC の代わりに Cache_Lite を使用することです。
他のオプションはありますか?私が知る限り、OpenID は Cache_Lite でナンスを管理するので、これが最善の解決策だと思いますが、コミットする前にすべてのオプションを確認したいと考えています。
ありがとう。