クッキーで本人確認メールの利用期限を管理する

このQ&Aのポイント
  • クッキーを使用して本人確認メールの利用期限を管理する方法について知りたいです。
  • 仮登録会員がアンカーを押すことで正規会員にする際に、クッキーを利用したいです。
  • 具体的なスクリプト例を教えていただきたいです。
回答を見る
  • ベストアンサー

クッキーで本人確認メールの利用期限を管理する

クッキーを用いて、本人確認メールの利用期限を管理したいと思っています。 どのようなスクリプトを書いていいのか思いつきません。 どなたかご教授お願いできますでしょうか? ちなみに本人確認メールでは何をしているかと言うと、 仮登録会員がその中にあるアンカーを押すことで、正規会員にしたいのですが その際にクッキーを利用しようと考えているのです。 例)setcookie("pre_member_regist", $email, time()+3600*24); // 24時間分の仮登録クッキー発行 ~ if(!$_COOKIE["pre_member_regist"]){ // 24時間制限の仮登録クッキーが消滅していれば $sql = "DELETE FROM member_profile WHERE member_kakutei=2 AND email='$email';"; mysql_query($sql) or die(mysql_error()); } このスクリプトに拘ることなく、スクリプト例をお教えいただければ幸いです。

  • PHP
  • 回答数2
  • ありがとう数4

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

  • ベストアンサー
  • mevius007
  • ベストアンサー率40% (14/35)
回答No.1

本人確認メールを送る時点で相手にクッキー仕込めてるんなら アンカー押したタイミングでクッキーを削除して、本人確認画面を出すようにすれば良いだけなように思えます //外部変数取得 $input_mode = $_GET["id"]; //アンカー押した時の処理 if($input_mode == '1'){  //クッキー取得  $val = $_COOKIE['pre_member_regist'];  //クッキーが残っていれば  if($val){   setcookie('pre_member_regist', '', time() - 60);  //クッキー削除   仮登録完了画面  } } <a href="next.php?id=1">本人確認してください</a>

beterugius
質問者

お礼

お忙しい中、詳しいご回答どうもありがとうございます。 この質問は自身で先程解決いたしましたので、貴重なご提案として 今後も使わせていただきます。どうもありがとうございました。

その他の回答 (1)

回答No.2

  クッキーなんてユーザーが消すことがありますよ さらに、ブラウザーが異なるとクッキーも異なります ユーザーが複数のブラウザーを使い分けてるとどうします?  

beterugius
質問者

お礼

お忙しい中、ご回答どうも有難うございました。

関連するQ&A

  • 本人確認メールについて

    販売サイトや、SNSでよくある本人確認メール(呼び方は知りません)の書き方について ご質問です。 ちなみに、自分で勝手な想像で作成したスクリプトを書いておきます。 どこが間違っているのかご指摘お願い致します。 -------------------------------------------------------------------------------------------------- //////////////////////// // 本人確認メール送信 // //////////////////////// $mail = $_SESSION['mail']; $con = mysql_connect("~", "~", "~"); mysql_select_db("~-~"); mysql_set_charset('utf8'); $sql = "SET NAMES utf-8"; mysql_query($sql); $sql = "SELECT * FROM member_profile WHERE email='$mail';"; $result = mysql_query($sql) or die; $row = mysql_fetch_row($result); $name = $row[2]; mysql_close($con); $header = "From:raindrop.jp-5247423@~.jp Content-Type:text/html; charset=ISO-2022-JP Content-Transfer-Encoding:8bit "; $top = $name.' 様<br><br>'; $aisatsu .= "~への会員登録のお申し込みありがとうございます。<br> まだ登録は完了しておりません。下記URLから登録を完了してください。<br><br>"; $html_header = '<doctype html><html><head><meta charset="ISO-2022-JP"></head><body bgcolor="#FFFFCC">'; $html_footer = '</body></html>'; $uniqid = uniqid(); $anchor = '<a href="http://~/php/membership_kakutei.php?from=1">http://sirius5.link/register/confirm/'.$uniqid.'</a>'; $contents="<br><br> ==================================================<br> このメッセージは~より自動的に送信しております。<br> このメールにお心当たりのない場合は、このメールを破棄してください。<br> ==================================================<br> <br> <br> <br> -----------------------------------------------------------<br> ~<br> http://daiko-king.com <br> -----------------------------------------------------------<br> "; ////////////////////////// // 新規登録者宛にメール // ////////////////////////// $message = $html_header.$top.$aisatsu.$anchor.$contents.$html_footer; $to = $mail; $subject = "【~】 仮登録完了"; // 題名 $to = mb_convert_encoding($to, "UTF-8", "auto"); // $toは、自動的にエンコードされない。 $subject = mb_convert_encoding($subject, "UTF-8", "auto"); $message = mb_convert_encoding($message, "UTF-8", "auto"); $header = mb_convert_encoding($header, "UTF-8", "auto"); mb_send_mail($to, $subject, $message, $header); // メール送信 ---------------------------------------------------------------------------------------------------- <a>あいうえお</a> の、あいうえお の部分が実際には存在しないディレクトリに してるのですが、(上記の場合だと、/register/confirmの部分です)それではだめ なのでしょうか。 実際にあるディレクトリだとしたら、たとえば、 https://aaa.com/register/confirm/ASkuCxyxsKxJ08kojrn770Js_jNOCXoD6ZXE0fgKQyI の、A以下の正規表現的な文字列つけることで何がしたいのかわかりません。 説明していただきたいです。正しい方法とスクリプトの書き方をよろしくお願いします。

    • ベストアンサー
    • PHP
  • セッションについて

    セッションの管理について疑問があって質問させていただきます。 PHPの単一サーバでのセッション管理であれば、$_SESSIONを利用すれば良いと理解しています。 例えば複数のサーバで運用する場合はクッキーを利用するという方向で良いでしょうか?$_SESSIONだとセッションの引き渡しはできないですよね。(?) ただし、お金があってロードバランサーを使った場合はできると理解しています。 複数のサーバで運用する場合、会員登録の機能ではDBと連携して 入力画面でクッキーを発行 setcookie("regist","hogehoge","有効期限を設定"); 確認画面 Cookieの値をDBと通信して確認 登録完了の画面で Cookieの値をDBと通信して確認 会員登録がうまくいっていれば setcookie("regist","","有効期限を巻き戻し"); として重複登録を防ぐ。 こんな感じで良いでしょうか。 間違い、誤解があれば教えてください よろしくお願いします。

    • ベストアンサー
    • PHP
  • mysqlのinsert文について、ご指導をお願いいたします。

    はじめまして。 プログラミング初心者です。 現在、PHP&MySQLで会員制掲示板を制作しようと奮闘しております。 会員登録フォームを作成し、下記SQL文にて会員登録を行おうとしているのですが、「エラーは出ていないのに、DBにデータが登録されない。」状況で、なにがおかしいのかわからず非常に困っております。尚、DBには正常に接続されています。 環境はVISTAにXAMPPを入れております。 私、PHP初心者のため、本のサンプルソースを加工して使用しようとしています。 下記にソースを記載いたしますので、 どうかご指導のほどお願いいたします。 (※情報が不足しておりましたら申し訳ありません。必要な情報をお教えいただけましたら幸いです。) // 接続 $link = mysql_connect( $db_host, $db_user, $db_password ); mysql_select_db( $db_name ); $result = mysql_query( 'set character set utf8' ); $sql = "select email1 from users where email = '" . mysql_real_escape_string( $_POST['email'] ) . "'"; $result = mysql_query( $sql ); // if ( $error != '' ) exit; // 会員データの挿入 $sql = "insert into member ( login_id, passwd, register_date, nickname, sex, birthday, email, pref, division, state ) values ( '" . mysql_real_escape_string( $_POST['email'] ) . "', '" . md5( $_POST['passwd'] ) . "', '" . date( 'Y-m-d H:i:s' ) . "', '" . mysql_real_escape_string( $_POST['nickname'] ) . "', '" . mysql_real_escape_string( $_POST['sex'] ) . "', '" . mysql_real_escape_string( $_POST['year'] . '-' . $_POST['month'] . '-' . $_POST['day'] . ' 00:00:00' ) . "', '" . mysql_real_escape_string( $_POST['email'] ) . "', '" . mysql_real_escape_string( $_POST['pref'] ) . "', '" . mysql_real_escape_string( $_POST['division'] ) . "', '1' )"; $result = mysql_query( $sql ); //echo $sql; // $title = '会員登録[3/4]'; ?>

    • ベストアンサー
    • PHP
  • クッキーに配列データを

    こんばんは。お世話になってます。 クッキーに配列データを保存したく、調べながら試行錯誤を繰り返していますが行き詰まってしまい、 アドバイスを頂戴できればと投函させて頂きます。 やりたいことは、掲示板にて書き込まれた内容をDBで管理しているのですが、各スレッドごとに1つのファイル(ページ)にて 呼び出しており、ページを閲覧した際、過去に1度でも閲覧した内容はカウント(訪問者数)せず、初めて閲覧した時のみ カウントするといった内容にしたいのですが、DBに登録されているデータも複数あることから、 DBに登録されているデータの連番を、配列データ(クッキー名:view)としてクッキーに登録しようと 考えるところまで至っていますが、うまく登録することが出来ずにいる次第です。 他にもっと適切なやり方があったら、そのご意見も頂戴したいのですが、以上のような考え方の場合、以下のスクリプトにおいて、 どこが不適切なのかをご指摘いただければ幸いにおもっております。 以下が、現在テスト中のスクリプトです。 $view_array = $_COOKIE["view[]"]; $view_array = unserialize(base64_decode($view_array)); //print_r($view_array); if(isset($_COOKIE["view[]"])){ if(!in_array($pno, $view_array)){ $count = $count+1; $sql = "update name set count = $count where no ='$pno'"; mysql_query($sql); $view_array[] = $pno; setcookie("view[]", base64_encode(serialize($view_array)), time() + 60*60*24*360, "/"); } }else{//クッキーに該当する配列がなかった場合 $count = $count+1; $sql = "update name set count = $count where no ='$pno'"; mysql_query($sql); $view_array = array($pno); setcookie("view[]", base64_encode(serialize($view_array)), time() + 60*60*24*360, "/"); } 以上、お忙しいなか恐縮ですが、宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • TIMESTAMPについて

    MySQLを用いて会員管理システムを構築しております。 仮登録者テーブルと本登録者テーブルの二つを用意しており、 仮登録者の本人確認が取れた時点で、本登録者テーブルへ データを丸々コピーする仕様にしております。 この際に、仮登録日時をTIMESTAMPを用いて日時を取得していますが、 本登録者テーブルへデータをコピーするタイミングで、【 本登録日時 】を 計算させるSQL文等をどの様に記述すればいいのかが分かりません。 現在は、この様なSQL文にしております。 ---------------------------------------------------------------------- $sql = "INSERT INTO user_table SELECT * FROM user_table_2 WHERE (number = ".intval($number).");"; ---------------------------------------------------------------------- user_table_2( 仮登録者テーブル )のデータをuser_table( 本登録者テーブル )へ コピーします。 【 仮登録の日時 】+【 本登録操作を行った日時 】=【 本登録日時 】という計算を WHERE句で実行出来るものなのでしょうか? それとも他に別の方法がありましたら、何卒ご教授いただきたく存じます。 各スペックは以下の通りです。 ---------------------------------- PHP 5.1.6 MySQL 5.0.77 サーバOS Linux ---------------------------------- どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • アクセス解析を作ってます。クッキーについて

    お世話になっております。 只今、アクセス解析を作っておりまして、クッキーの意義を見直したく質問させて下さい。 と、申しますのも、以下のようなスクリプトを設置しているのですが、殆どの人が初めての訪問者として認識してしまう状況となっております。 #IDと時刻などを登録などを登録する訪問者用テーブル(access_visitorテーブル)と、そのIDを含め訪問したURLや時刻などの詳細を登録するテーブル(analyzerテーブル)を設置しています。 if(!isset($_COOKIE["user_id"])){//初めての訪問者だったら、access_visitor_TBに登録。そしてuser_idを登録&取得   //access_visitorテーブルに登録し、   //その登録したIDを含め、訪問したURLや時刻などをanalyzerテーブルに登録 }else{//再訪問者だったら   $user_id = addslashes($_COOKIE["user_id"]);//このuser_idは、 access_visitorのIDを指しています。   $visit_date = $_COOKIE['visit_date'];//前回訪問時刻     $sql= "select * FROM access_visitor WHERE user_id = '$user_id'";     $result = mysql_query($sql);     $rows = mysql_num_rows($result);     if($rows == 1){       //analyzerテーブルにデータ登録     }else{      //念のため、ここでもaccess_visitorテーブルに登録し、      //その登録したIDを含め、訪問したURLや時刻などをanalyzerテーブルに登録     } } //クッキーセット setcookie("user_id", $user_id, time() + 60*60*24*30*12, "/"); setcookie("visit_date", $date, time() + 60*60*24*30*12, "/"); 以上のような感じですが、どこか不適切なところはありますでしょうか? 何度も作りかえ、現在に至っておりますが、上記のようなスクリプトだと、殆どの方にクッキーをセットすることが出来ず($_COOKIE["user_id"]を取得できず)、初めての訪問者として処理されてしまいます。 お忙しいなか恐縮ですが、ご指摘など頂戴出来れば幸いです。宜しくお願い致します。

    • 締切済み
    • PHP
  • ご存知の方居ますか

    HPを運営していてメンバー会員だけが観覧出来るようにと、新規登録欄を設けたいのです、下記のような設定がしたいと考えているのですが、方法が分りません。 https://regist.mail.goo.ne.jp/id/regist?site=billing.goo.ne.jp&complete=http%3A%2F%2Fbilling.goo.ne.jp%2F ご存知でしたらご教授願います。

  • 複数テーブルの更新方法について

    会員情報の登録処理について 会員情報を管理するテーブルが3つあります。 もし、下記の(2)(3)でエラーのとき 中途半端に会員基本情報のみ出来てしまいます。 このときロールバックみたいな機能があるのでしょうか? みなさんは、このような場合どのように対応しているのでしょうか? ご指導よろしくお願いします。 【環境】 MYSQL:ver5 PHP:ver5 他に特にありません テーブル (1)会員基本情報 :staff  ※必ず存在する (2)会員関連情報1:staff_op1  ※ないときもある 画面選択項目で会員ごとに選択件数が違うため別テーブルにしている。  例:好きな○○のジャンルなど複数選択みたいな... (3)会員関連情報2:staff_op2  ※ないときもある  例:好きな○○のジャンルなど複数選択みたいな... //会員基本情報登録 $sql = "INSERT INTO staff ('staff_cd') VALUES ('12345')"; $result=mysql_query($sql); if($result){ //会員基本情報登録がOKのとき //会員関連情報1を登録(実際は選択件数分ループが必要) $sql = "INSERT INTO staff_op1 ('staff_cd','item1') VALUES ('12345','00001')"; $result=mysql_query($sql); if($result){ //会員関連情報1登録がOKのとき //会員関連情報2を登録(実際は選択件数分ループが必要) $sql = "INSERT INTO staff_op2 ('staff_cd','item1') VALUES ('12345','00001')"; $result=mysql_query($sql); if($result){ } else{ $error[] = "insert staff_op2 table err" } } else{ $error[] = "insert staff_op1 table err" } } else{ $error[] = "insert staff table err" } if(!$error){ $error[] = "会員情報登録完了!" }

    • 締切済み
    • PHP
  • 複数テーブルの更新方法について

    会員情報の登録処理について 会員情報を管理するテーブルが3つあります。 もし、下記の(2)(3)でエラーのとき 中途半端に会員基本情報のみ出来てしまいます。 このときロールバックみたいな機能があるのでしょうか? みなさんは、このような場合どのように対応しているのでしょうか? ご指導よろしくお願いします。 【環境】 MYSQL:ver5 PHP:ver5 他に特にありません テーブル (1)会員基本情報 :staff  ※必ず存在する (2)会員関連情報1:staff_op1  ※ないときもある 画面選択項目で会員ごとに選択件数が違うため別テーブルにしている。  例:好きな○○のジャンルなど複数選択みたいな... (3)会員関連情報2:staff_op2  ※ないときもある  例:好きな○○のジャンルなど複数選択みたいな... //会員基本情報登録 $sql = "INSERT INTO staff ('staff_cd') VALUES ('12345')"; $result=mysql_query($sql); if($result){ //会員基本情報登録がOKのとき //会員関連情報1を登録(実際は選択件数分ループが必要) $sql = "INSERT INTO staff_op1 ('staff_cd','item1') VALUES ('12345','00001')"; $result=mysql_query($sql); if($result){ //会員関連情報1登録がOKのとき //会員関連情報2を登録(実際は選択件数分ループが必要) $sql = "INSERT INTO staff_op2 ('staff_cd','item1') VALUES ('12345','00001')"; $result=mysql_query($sql); if($result){ } else{ $error[] = "insert staff_op2 table err" } } else{ $error[] = "insert staff_op1 table err" } } else{ $error[] = "insert staff table err" } if(!$error){ $error[] = "会員情報登録完了!" }

  • cookieを使って登録を2回以上できないようにしたい。

     いつもお世話になっております。  今、簡単な会員登録のようなcgiを使ってみようと思って、初心者ながら改造をコツコツやっているのですが、どうしても分からないのが、クッキーによる、2重投稿の禁止です。  クッキーを取得して、クッキーで判別して2回目以降は会員登録ができないようにするcgiのスクリプトはどういう感じなのでしょうか。  どなたか、教えてくださいませ。 よろしくお願い致します。

    • ベストアンサー
    • CGI

専門家に質問してみよう