2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Memcachedでフォーム2重投稿対策

Posted at

Linuxサーバとして動作し、任意のキーや値をキャッシュしてくれる。RDBMSと連携してデータ参照の高速化によく使われるけど、今回はPerlでのAPIを通してフォームの2重投稿対策として使ってみるメモ。

準備

  1. Memcachedのインストール

技評さんを参考にしました。Memcachedの操作方法もこちらを参照。

  1. 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重投稿対策をお探しの方はぜひお試しあれ。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?