質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

5472閲覧

php,cookie,sessionを利用して1日1回投票

saw

総合スコア10

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2016/10/13 10:40

編集2016/10/13 10:50

php,cookieを利用して1日1票しか投票できないサイトを作ったのですが、cookieを消してしまうと何回も投票できてしまいます。そこでsessionを利用して1日1票を実装したいと考えたのですが、どうすればよいのかわかりません。もしcookieだけで実装できる方法があれば教えて頂きたいです。
以下にcookieを利用した時のphpのソースを貼っておきます。(wordpressを利用しているため数個wordpress専用の関数等が使用してあります。)

php

1<?php 2date_default_timezone_set('Asia/Tokyo'); 3setcookie("useable_cookie",'true',time()+60*60*24*1); 4 5if (isset($_POST['no'])) { 6 setcookie("voted",'true',strtotime("tomorrow")-1); 7} 8 9mb_language("Ja"); 10mb_internal_encoding("UTF-8"); 11$to = "メールアドレス"; 12$sub = "番号:".$_POST['no']; 13$message = "番号:".$_POST['no']; 14$from = "From: メールアドレス\r\n"; 15$from .= "Return-Path: メールアドレス"; 16 17get_header(); 18?> 19 <main> 20 <article> 21 <h1>投票</h1> 22<?php 23if(!isset($_COOKIE['useable_cookie'])){ 24?> 25 <h2>エラー</h2> 26 <p>投票するためにはCookieを有効にする必要があります。</p> 27<?php 28}else{ 29 if (isset($_COOKIE['voted'])) { 30?> 31 <h2>投票済み</h2> 32 <p>明日の0:00投票することができます。</p> 33<?php 34 }else{ 35 if(isset($_POST['no']) == false){ 36?> 37 <h2>投票フォーム</h2> 38 <form class="vote_form" action="<?php echo esc_url( home_url( '/category/vote' ) ); ?>" method="post" > 39 <label class="no"> 40 <input type="radio" name="no" value="1" />1 41 </label> 42 <label class="no"> 43 <input type="radio" name="no" value="2" />2 44 </label> 45 <input class="vote_button" type="submit" name="vote" value="投票" /> 46 </form> 47<?php 48 }else{ 49 $send = mb_send_mail($to, $sub, $message, $from); 50 if(isset($send)){ 51?> 52 <p>投票しました。</p> 53<?php 54 }else{ 55?> 56 <p>投票できませんでした。</p> 57<?php 58 } 59 } 60 } 61} 62?> 63 </article> 64 </main> 65<?php get_footer(); ?>

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

セッションはCookieに依存しているので,「cookieを消してしまうと何回も投票できてしまいます。そこでsessionを利用して」というのは最初から計画が破綻していますね.セッションでも同じようにCookieの消去で対策されてしまいます.私が考える,もっとも優れた解決策はIPアドレス + reCAPTCHAです.

投稿2016/10/13 10:59

編集2016/10/13 11:01
mpyw

総合スコア5223

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saw

2016/10/13 12:10

なるほどIPアドレスを使うんですね。リンクまで貼っていただきありがとうございます。
guest

0

似たような要件で過去に対応したことあります。
その時は投票端末のipをストックして管理してました。
エンタメ系のサイトだったのでそんなに厳重なチェックはしてませんけど。

投稿2016/10/13 11:02

fromageblanc

総合スコア2724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saw

2016/10/13 12:10

IPアドレスを記録するのは思いつきませんでした。丁寧にありがとうございます。
guest

0

セッションだと、ブラウザを閉じてしまったら、その後情報を読み取ることができないので、要件を満たすことはできませんよ。

投稿2016/10/13 10:44

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saw

2016/10/13 10:51

回答ありがとうございます。知識が足りず申し訳ありません。 cookieのみを利用してこのような機能を実装することは可能でしょうか?
退会済みユーザー

退会済みユーザー

2016/10/13 10:53

cookieを使うということは、「cookieを消してしまうと何回も投票できてしまいます」これを防ぐことも不可能ですよ。
saw

2016/10/13 12:09

なるほど、丁寧にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問