Linuxサーバとして動作し、任意のキーや値をキャッシュしてくれる。RDBMSと連携してデータ参照の高速化によく使われるけど、今回はPerlでのAPIを通してフォームの2重投稿対策として使ってみるメモ。
準備
- Memcachedのインストール
技評さんを参考にしました。Memcachedの操作方法もこちらを参照。
- PerlのAPI導入
Cache::Memcached::Fastを使います。setとgetとdeleteしか使わないのでこれで十分。
コードはこんな感じ
use Cache::Memcached::Fast;
use Digest::MD5 qw(md5_hex)
my $mc = new Cache::Memcached::Fast(
{servers => [{address => 'localhost:11211'}]}
);
sub set_double_post_check {
my ($user_id, $expiration_second) = @_;
my $key = "double-post-check-$user_id";
my $value = md5_hex($user_id);
$expiration_second ||= 300;
return $mc->set($key, $value, $expiration_second);
}
sub check_double_post_check {
my $user_id = shift;
my $key = "double-post-check-$user_id";
my $value = $mc->get($key);
if ( $value eq md5_hex($user_id) ) {
$mc->delete($key);
return 1;
}
return 0;
}
即席でやればこんなもん。本当はkeyも暗号化したほうがいいし、valueは時間情報なども含めて暗号化すべき。
とりあえずこんな感じでMemcachedを使ってフォームの2重投稿対策が実装できるので、cookie以外での2重投稿対策をお探しの方はぜひお試しあれ。