COOKIEを使った二重投稿禁止する方法

このQ&Aのポイント
  • COOKIEを利用して二重投票を禁止する方法を教えてください。
  • 現在の方法ではCOOKIEが正しく記録されず、新規投稿スレッドのCOOKIEが表示されてしまいます。
  • 用途別にCOOKIEを切り分けて二重投稿を禁止する方法を教えてください。
回答を見る
  • ベストアンサー

COOKIEを使った二重投稿禁止する方法

COOKIEを利用して二重投票を禁止するようにしたいと思っています。 $id=12; //スレッドID if(isset($_COOKIE[$id])){ print("連続投票です。"); exit; }else{ setcookie($id , "vete_flg" , time()+$3600*24*7); } 上記のようにしているのですが、COOKIEにきちんと記録されず、 print_r($_COOKIE)を見たところ、上記と同じように設定した 新規投稿スレッドのCOOKIE「Array ( [entry] => entry_flg ) 」 が表示されてしまいます。 どうすれば用途別にCOOKIEを切り分けて二重投稿等を禁止できるのか、 その方法を教えてください。m(_ _)mペコリ

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ブラウザ側に記録されたCOOKIEはどうなっていますか? 正しく記録されていますか? あと、setcookieの第一パラメータは string になっていますので、 setcookie("$id" , "vete_flg" , time()+$3600*24*7); ではいかがでしょうか? 読み出しは $_COOKIE["$id"] として、確認してみてください。

参考URL:
http://jp2.php.net/manual/ja/function.setcookie.php
dororon999
質問者

お礼

Cookieをフォルダから強制的に削除したりしていたら、現状のままでも問題なく動くようになりました。 なにか釈然としないのですが、もう少し様子をみてみることにいたしますm(_ _)mペコリ

関連するQ&A

  • cookieに複数のIDを持たせる場合

    cookieについての質問です。 是非お力をお貸しください。よろしくお願いします。 2重投稿を防ぐ方法としてcookieを使用したいと思っています。 下記のように書いたのですが、うまくID別に認識してくれません。 $ID = ひっぱてきたID; if(isset($_COOKIE['$ID'])){ print('エラー'); exit; } else{ setcookie('$ID',time()+60); } $_COOKIE['$ID']←こういった感じで使用することはできないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • cookieにカンマ区切りでつめこみたい

    phpで500以上の投票ページを作成しています。 それぞれの投票ページで二重投稿を防ぐためにsetcookieで以下のように設定しました。 setcookie('vote['.$voteid.']', $voteid); if (isset($_COOKIE['vote'])) { foreach ($_COOKIE['vote'] as $name => $value) { echo "$name : $value <br />\n"; } } 投票ページを4つ試したところ 102 : 102 320 : 320 558 : 558 600 : 600 このように表示されました。 しかしながら 「1つのサーバから受け取ることが出来るクッキーは最大20個まで、全体でも合計300個までのクッキーしか保持できないことになっています」 とどこかで見かけました。 上記の場合ですと4つのクッキーを利用していることになる(?)ため、できれば 102,320,558,600 というようにカンマ区切りで、1つのクッキーにつめこみたいのですが、その保存方法と取り出し方が分かりません。 どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • cookie が有効がどうか判断させたいのですが・・・

    HPを見ているブラウザーが cookie が有効かどうか しらべたいのですが、よくある cookie の書き込みと 読み出しのサンプルを使って以下のようなスクリプトを 考えました。 $cookie_flg = 1; print &setCookie("CHECK", $cookie_flg); # Cookie の値を得る &getCookie(); $cookie_flg = $COOKIE{'CHECK'}; if ($cookie_flg eq '') { $cookie_flg = 0; # Cookie が使えない } return $cookie_flg; ・・・これでわかるでしょうか? ブラウザーでは実際に、cookie が使える状態 なのですが、アクセス最初の1回目は 0 が返って くるのです。 ( 2回目以降は 1 が返ってきて望みどおりです ) ひょっとして、cookie の仕様として、書き込んで から、すぐに読み出そうとしても、読めないもの のでしょうか? それとも、cookie を書き込んだあと、一旦、 print "Content-type: text/html\n\n"; で閉めてから、読み出さないといけないとか??? こんなんで、何日もうんうん考え込んでます。 ベテランの方には、あまりに馬鹿馬鹿しい問題 なのかもしれませんが・・・

    • ベストアンサー
    • Perl
  • phpのsessionとcookieについて

    質問は以下に2つです。 プログラムの説明は、pass,idから認証を行い、sessionidを発行します。二度目の以降はsessioidから認証します。 sidpost.phpからpostでIDとパスワードを入力させます。 データベースはid, pass, sidの3つのカラムがあります。 <?PHP require_once'DB.php'; session_name("sid"); session_start(); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <?php $id = $_POST['id']; $pass =$_POST['pass']; $cookie = $_COOKIE['sid']; $sid = session_id(); //データベース参照 //プレースホルダーを使用 //id からpassを参照する //cookie から sidを参照する $data=$sth->fetchRow(DB_FETCHMODE_ASSOC);//参照したデータを$dataの連想配列に格納 //sid保存のプレースホルダー $sth2 = $dbh->prepare('UPDATE accountid SET sid=? WHERE id=? AND pass=?'); //cookieが保存されていない場合 if(!isset($cookie) && isset($pass) && isset($id)){ //idとpassから認証 if($pass === $data['pass']){ $sth2 = $dbh->execute($sth2, array($sid, $id, $pass)); echo "初めてのログインsid登録"; } //sidがある場合cookieとデータベースのsidを比較 }else if(isset($cookie)){ if($cookie == $data['sid']) echo "sidあり成功"; //クッキーがあり、データベースと一致しない場合,sidを破棄する }else{ echo"あるはずのクッキー" .$COOKIE['sid']."<br>"; $_SESSION=array(); setcookie('sid', '', time()-3600); session_destroy(); echo "ないはずのクックキー".$_COOKIE['sid']; } //それ以外は入力フォームにリダイレクト }else{ header("location: ./sidpost.php?error=error"); } $dbh->disconnect(); ?> </body> </html> 上のようなセッション管理のプログラムを書きました。 質問は2つありまして、 ・1つめは、通常セッション管理を行う際の、条件はどのようにするのが一般的ですか? IDとパスワードがデータベースと一致する場合としない場合の2通り、cookieがある場合、ない場合の2通り、もしcookieがある場合は、データベースの値と一致する場合としない場合の2通りが考えられます。一番最適な条件文はどのようにすればよいでしょうか? またその処理はどのようにすればよいのでしょうか。 例えばcookieがあり、データベースと一致しない場合、$_SESSIONの初期化、setcookieでクッキーの削除、session_destroy()するなど。。。なにかよくわからなくなってしまいました。 ・二つ目は、 上のプログラムではじめsession_name('sid')およびsession_start()を宣言し、クライアントとサーバに$sid=session_idを発行しています。なので、$_COOKIE['sid'];の値には session_id()($sid)になっているはずです。 下のほうで、セッションの管理を行う際、 //クッキーがある場合 else if(isset($cookie)){ if($cookie == $data['sid']) echo "sidあり成功"; //クッキーがあり、データベースと一致しない場合,sidを破棄する }else{ echo"あるはずのクッキー" .$COOKIE['sid']."<br>"; $_SESSION=array(); setcookie('sid', '', time()-3600); session_destroy(); echo "ないはずのクックキー".$_COOKIE['sid']; } クッキーがあり、データベースと一致しない場合に、sessionおよび、cookieの破棄をしています。この前後でechoをもちいて$_COOKIE['sid']の値を出力すると、 破棄するの前のechoでクッキーが表示されず、 破棄したあとのechoでクッキーが表示されました。 なぜこのような結果になるのですか、逆では?と思いました。

    • 締切済み
    • PHP
  • 変数名の自動生成(投票の多重投稿防止)

    投票システムを作っていますが、多重投稿を防ぐためにクッキーに値を保存しようと考えました。(それほど厳密な多重投稿防止ではないので) 投票するアイテムが複数あり、1番目のアイテムに投票した場合は、同じアイテムには連続して投稿はできないけれど、他のアイテムには投票できると、要するに投票されたアイテムもクッキーに保存しておきたいのです。 今、 setcookie("ABC","vote".$id."=1",time()+90*24*60*60); として、id1に投票した場合はvote1という変数に1が保存されるようになっています。 で、2番目、3番目のアイテムに投票された場合や、投票時にすでに投票されているかどうかチェックするときにクッキーの情報を呼び出すわけですが、変数名自体を自動生成させるのはどうすればいいのでしょうか。 例えば、id1に投票があったかどうかチェックする場合に if(isset($ABC)){ parse_str($ABC); if(isset("$vote".$id)){ ・・・ とは書けないですよね? 変数名自体を作る方法を教えてください。 また、このような状態で多重投稿を防ぎたい場合に、もっと簡単な方法はないでしょうか。 (クッキーを使わない方法でも結構です) あわせて教えて頂けると嬉しいです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • セッションの削除

    例えば www.hoge.com/foo/index.php で session_start(); setcookie("bar",session_id(), time()+3600); として画面遷移を行いながら登録作業を行い、 完了画面regist.php で session_start(); $_SESSION = array(); if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000); } session_destroy(); としましたが$_COOKIE["bar"]が初期化されません。 どのようにしたら良いでしょうか? 教えてください。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • アンケートで二重投稿を防ぎたい

    現在、フリーのCGIを使用し社内でアンケートをとっています。全部で20台程のPCからですが、表題の通り二重投稿を禁止したいのです。または二重投稿したマシン名かIPアドレスを特定することができればそれでも良いです。今までの皆さんの回答をいくつか見させて頂きまして、cookieかIPアドレスで判別することである程度防げると思っております。どちらが良いかのアドバイスを含め、できれば具体的な方法をご教授下さい。アンケートは1日ひとつに限らず、2,3時間おいて行われることもあります。よろしくお願いします。

    • ベストアンサー
    • CGI
  • $_COOKIEについて

    はじめまして。 PHPを勉強中なのですが$_COOKIEを使った際にエラーになってしまいます。 それが何故なのか分からないのですが、この辺に詳しい方助けて下さい。 ↓↓状況は以下のとおりです。↓↓ ・開発環境:xampp、php、vista ・下記のスクリプトを記述してブラウザで表示すると、「1回目のアクセスです。」とともにエラー表示も出てきてしまう。 <?php if (isset($_COOKIE["count"])) { $count = $_COOKIE["count"] + 1; } else { $count = 1; } setcookie("count", $count); echo "${count}回目のアクセスです。"; ?> ・上記のスクリプトを実行した際のエラー表示は「 Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs(ディレクトリ)php:182) in (エラーの行数) ・ちなみに、練習で作ってるだけなので同じページに、「setcookie」と「$_COOKIE」を使っている。(ただし、クッキー名などは、前に使っているのとは被らないようにしている) 以上です。 やりたい事は、ブラウザにCookieを送り、読み込むたびに「?回目のアクセスです。」の回数を増やしていきたいです。 しかし、これも出来ずに何度読み込みしても「1回目のアクセスです。」とエラー表示しかでません。 この質問で上手く伝わったかわかりませんが、ご見識ある方お力添え下さいませ。

    • ベストアンサー
    • PHP
  • setcookieで配列に格納される順番について

    setcookie('pi[0]', 'hoge'); setcookie('pi[1]', 'piyo'); setcookie('pi[2]', 'puyo'); print_r($_COOKIE['pi']); を試すと、 Array ( [1] => piyo [2] => puyo [0] => hoge ) になります。 なぜ、 Array ([0] => hoge [1] => piyo [2] => puyo ) にならないのでしょうか? どうして順番が入れ替わるか教えてください

    • ベストアンサー
    • PHP
  • ブラウザを終了するとCookie情報も消える。。

    知っている方いましたらご教授お願いいたします。 ■現象 safari・クロームにてCookie情報を保存したハズなのに 上記、2つのブラウザを終了⇒起動すると 保存したハズのCookie情報が消えている。 ■PHPソース $timeout = time() + (365*30) * 86400; setcookie('LOGIN_ID' ,$USER_LOGIN_ID_TEXT , $timeout,'/','lolipop.jp'); setcookie('LOGIN_PASS' ,$USER_LOGIN_PASSWORD_TEXT , $timeout,'/','lolipop.jp'); setcookie('LOGIN_CHK' ,'checked' , $timeout,'/','lolipop.jp'); ■補足 上記3つの、ログインID・パスワード・保存するかどうかのチェックボックスの3つをクッキーに保存しています。 ドメインはロリポップを利用しています。 以上、よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう