たけるのプログラミング

作ったものとか、気ままにアップします。

【PHP】会員登録なしで投票できる仕組みを考えてみた!【Cookie】

こんにちは。

クッキーといえばステラおばさんのクッキーが好きです、、、、、、



今回はタイトル通り、「会員登録なしで投票できる仕組み」について考えていきたいと思います。

最近、会員登録なしで投票ができるWebアプリを見かけます。

例えば以下のアプリ
tagvote.grinspace.jp

1度投票すると、再投票できない仕組みになっています。

1回目の投票はChromeを用いて投票しました。2回目としてSafariで投票しようとすると、、、投票できました。

つまりリクエストを送ってくるブラウザごとに何か値をプログラム上で設定して、認識していると思います。

結論、Cookieを使っているのではないかと考えました。

実際に同じ現象を再現すべく自分でプログラムを書いてみました。

実行結果

chromeで画面表示
f:id:takeru232423:20210912225428p:plain

投票してみる
f:id:takeru232423:20210912225518p:plain

画面を更新しても上記のまま

そして、そのままSafariで画面表示してみると、投票ができる
f:id:takeru232423:20210912225902p:plain

ソースコード

<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <?php
    //ボタンが押されたらcookieをブラウザにセットする
    if (!empty($_GET)) {
        setcookie('is_pushed', $_GET['is_pushed'], time()+60*60*24);
        header('location:vote.php');
    }
    ?>
    <form action="" method="GET">
        <!--cookieに値があった場合(投票されていた場合)、disabled属性を追加して投票できなくする-->
        <button type="submit" name="is_pushed" value="pushed" <?php if (isset($_COOKIE['is_pushed'])) {
        echo 'disabled';
    } ?>><?php if (empty($_COOKIE['is_pushed'])) {
        echo '投票する!';
    } else {
        //cookieに値があった場合(投票されていた場合)
        echo '投票済み!';
    }?></button>
    </form>
</body>

</html>

www.php.net

比較的に簡単に実装できました。

感想

インストールとか会員登録とかはユーザーにとって、そのサービスを使うか使わないか判断する要因の一つだと考えています。

上記で紹介した投票サイトや、twitterでよく見かける匿名質問サービスのpeing(
Peing(ペイング) -質問箱- 匿名で質問を受け取ろう
)は会員登録が必要ないので、気軽に使えると感じるユーザーが多いのではないかと感じました。

この記事関して、間違い等ございましたらコメント頂けるとありがたいです。