JavaScriptでCookieの回数で閲覧制限を行う方法

このQ&Aのポイント
  • JavaScriptを使用して、Cookieを取得し、閲覧回数と閲覧日付を管理することで、1日に3回しかページを閲覧できないコンテンツを作ることができます。
  • クッキーに登録する汎用関数とクッキーを取り込む汎用関数を定義し、訪問回数と訪問日付を管理します。
  • 初めての訪問時には訪問回数を初期化し、訪問日付を保存します。2回目以降の訪問時には、訪問回数を増やし、前回の訪問日付と比較して同じ日の場合には閲覧制限をかけるページにリダイレクトします。
回答を見る
  • ベストアンサー

Cookieの回数で閲覧制限、javascript

javascriptでCookieを取得し、閲覧回数と、閲覧した日付で、 1日3回しかページを閲覧することが出来ないコンテンツを作りたいと思っています。 以前のどなたかの質問にあったのを見つけたのですが、 解決をしていましたが、私がいざ行ってもまったくできなかったため、 改めて、間違っている部分と正確なソースをどなた様かご教授いただけませんでしょうか? ※名前の保存はなしにできればしたいです…。 どうかよろしくお願いいたします。 ---------------------------------- <script language="JavaScript"><!-- /* クッキーに登録する汎用関数     */ /* 書式 : mySetCookie(クッキー名,値,有効期限日数) */ /* 戻り値 : なし(void) */ function mySetCookie(myCookie,myValue,myDay){ myExp = new Date(); myExp.setTime(myExp.getTime()+(myDay*24*60*60*1000)); myItem = "@" + myCookie + "=" + escape(myValue) + ";"; myExpires = "expires="+myExp.toGMTString(); document.cookie = myItem + myExpires; } /* クッキーを取り込む汎用関数 */ /* 書式 : myGetCookie(クッキー名) */ /* 戻り値 : 値(string) null:該当なし */ function myGetCookie(myCookie){ myCookie = "@" + myCookie + "="; myValue = null; myStr = document.cookie + ";" ; myOfst = myStr.indexOf(myCookie); if (myOfst != -1){ myStart = myOfst + myCookie.length; myEnd = myStr.indexOf(";" , myStart); myValue = unescape(myStr.substring(myStart,myEnd)); } return myValue; } // --></script> <script language="JavaScript"><!-- myD = new Date(); myYear = myD.getYear(); myYear4 = (myYear < 2000) ? myYear+1900 : myYear; myMonth = myD.getMonth() + 1; myDate = myD.getDate(); myYMD = myYear4 + "/" + myMonth + "/" + myDate; myUser = myGetCookie("USER_NAME"); // 名前読込 if (myUser == null){ // 初めての訪問 myUser = "匿名";         mySetCookie("USER_NAME",myUser,365); // 名前保存 mySetCookie("USER_DATE",myYMD,365); // 訪問日保存 myLast = myYMD; // 前回訪問日とする myCount = 1; // 訪問回数→初回 } else { // 2度以上の訪問 myCount = eval(myGetCookie("USER_COUNTER")); // カウンター読込 myLast = myGetCookie("USER_DATE"); // 前回訪問日読込   if ( myYMD == myLast){ // 前回訪問日が今日だったら   window.location = "sorry.html";    // 1日1回しか閲覧出来ないことを伝えるページに飛ばす } } myLast = myYMD; // 前回訪問日を更新する myCount = myCount +1; // 閲覧回数を追加する mySetCookie("USER_COUNTER",myCount,365); // カウンター更新 mySetCookie("USER_NAME",myUser,365); // 名前の賞味期間を更新 // --></script> ----------------------------------

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

  • ベストアンサー
  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.1

[間違い] 二度以上の訪問時に、訪問日が保存されていない(最終行あたり) sorry の条件に、訪問回数が三回より大、の条件が不足 前回訪問日が今日より前なら、訪問回数の初期化が必要 [戯言] 変数に var を付け忘れてるのでデバッグが大変 eval ダメ絶対 getYear 非奨励なので getFullYear を そもそも全体的に古い書き方だから、もっといいコピペ元を探すべき

skyskysky11
質問者

補足

迅速なご返答ありがとうございます。 無理を承知でお伺いいたしますが詳しいソースコードいただけたりできますか? 大変恐れ致しますが宜しくお願い致します。

関連するQ&A

  • Cookieの回数で閲覧制限、javascript

    javascriptでCookieを取得し、閲覧回数と、閲覧した日付で、 1日1回しかページを閲覧することが出来ないコンテンツを制作しています。 javascript初心者で、何度やってもうまくいかないため、 どこが悪いのかを教えていただきたいです。 現状だと、1日に何回もページを閲覧することが出来てしまいます、、 深夜12時過ぎる(日付が変わる)と、再度ページを 閲覧できるようにしたいと思っています。 どうぞよろしくお願いします。 ---------------------------------- <script language="JavaScript"><!-- /* クッキーに登録する汎用関数     */ /* 書式 : mySetCookie(クッキー名,値,有効期限日数) */ /* 戻り値 : なし(void) */ function mySetCookie(myCookie,myValue,myDay){ myExp = new Date(); myExp.setTime(myExp.getTime()+(myDay*24*60*60*1000)); myItem = "@" + myCookie + "=" + escape(myValue) + ";"; myExpires = "expires="+myExp.toGMTString(); document.cookie = myItem + myExpires; } /* クッキーを取り込む汎用関数 */ /* 書式 : myGetCookie(クッキー名) */ /* 戻り値 : 値(string) null:該当なし */ function myGetCookie(myCookie){ myCookie = "@" + myCookie + "="; myValue = null; myStr = document.cookie + ";" ; myOfst = myStr.indexOf(myCookie); if (myOfst != -1){ myStart = myOfst + myCookie.length; myEnd = myStr.indexOf(";" , myStart); myValue = unescape(myStr.substring(myStart,myEnd)); } return myValue; } // --></script> <script language="JavaScript"><!-- myD = new Date(); myYear = myD.getYear(); myYear4 = (myYear < 2000) ? myYear+1900 : myYear; myMonth = myD.getMonth() + 1; myDate = myD.getDate(); myYMD = myYear4 + "/" + myMonth + "/" + myDate; myUser = myGetCookie("USER_NAME"); // 名前読込 if (myUser == null){ // 初めての訪問 myUser = "匿名";         mySetCookie("USER_NAME",myUser,365); // 名前保存 mySetCookie("USER_DATE",myYMD,365); // 訪問日保存 myLast = myYMD; // 前回訪問日とする myCount = 1; // 訪問回数→初回 } else { // 2度以上の訪問 myCount = eval(myGetCookie("USER_COUNTER")); // カウンター読込 myLast = myGetCookie("USER_DATE"); // 前回訪問日読込   if ( myYMD == myLast){ // 前回訪問日が今日だったら   window.location = "sorry.html";    // 1日1回しか閲覧出来ないことを伝えるページに飛ばす } } myLast = myYMD; // 前回訪問日を更新する myCount = myCount +1; // 閲覧回数を追加する mySetCookie("USER_COUNTER",myCount,365); // カウンター更新 mySetCookie("USER_NAME",myUser,365); // 名前の賞味期間を更新 // --></script> ----------------------------------

  • javaScriptのエラー

    サイトにjavaScriptを使って自動日付表示があったのでアップしたところ年代が2004では無く104と表示してしまいます。ちなみにスクリプトは下記の通りですよろしく御願します。 <略> myWeek = new Array("Sun.", "Mon.", "Tue.", "Wed.", "Thu.", "Fri.", "Sat."); myD = new Date(); myYear = (myD.getYear() <= 99) ? 1900+myD.getYear() : myD.getYear(); myMonth = myD.getMonth() + 1; myDate = myYear + "/" + myMonth + "/" + myD.getDate(); myDay = myWeek[myD.getDay()]; document.write(myDate, " ", myDay); <略>

    • ベストアンサー
    • Mac
  • 画面の表示が出なくなりました。

    ここ1年ほどHPを営業用で開いています。 TOPに当日の曜日の表示がでるように、どこかのサンプル提供サイトからHTMLをコピーして使っていました。ところが、今日、表示が出ないことに気づきました。いつからエラーになったかわかりません。HTMLを何かのはずみで、損なったのかもしれません。 現在のHTMLを当該部分のみ表示します。 <td><b> WEEK :</b></td> <td bgcolor="black"><font size="4" color="yellow"><b><script language="JavaScript"><!--myTbl = new Array ("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");myD = new Date();myYear = myD.getYear();myYear4 = (myYear < 2000) ? myYear+1900 : myYear;myMonth = myD.getMonth() + 1;myDate = myD.getDate();myDay = myD.getDay();myHours = myD.getHours();myMinutes = myD.getMinutes();mySeconds = myD.getSeconds();myMess1 = myYear4 + "年" + myMonth + "月" + myDate + "日";myMess2 = myTbl[myDay] + "";myMess3 = myHours + "時" + myMinutes + "分" + mySeconds + "秒";myMess = myMess2;document.write( myMess );// --></script></b></font> </td> どこかにバグがあると思います。教えてください。 HTMLは自分でプログラミングしますが、CGIは全く出来ません。

    • ベストアンサー
    • HTML
  • 違うサイトに移動した時にcookieを削除する方法

    スマートフォンページを作成しています。 スマートフォンからPCページにアクセスした場合、 強制的にリダイレクトでスマホページに移動させる ようにしています。 ただし、この方法ではユーザーはPCページを閲覧する事 ができません。 サイトに訪問した最初だけ強制的にリダイレクトさせる為に、 cookieを利用しようと思います。 クッキーが保存されている間はリダイレクトさせず、 PCページとスマホページのリンク先を表示させ、相互に 遷移が可能にする事を想定しています。 他サイトに遷移したところで保存していたクッキーを削除 したいのですが、javascriptでドメインが遷移した際に cookieを削除する事は可能でしょうか。 ちなみにサブドメインを含め、複数のドメインを対象と しています。 どなたかご教示お願いいたします。

  • Cookieの使い方が分からない。

    JavaScriptの入門の本を読んでいますが、説明がないか、あっても不充分でよく分かりません。どなたか教えてください。 質問個所に番号を付けて全文を書き、その下に質問させて頂きます。 <SCRIPT> <!-- var strCookieName="yourName="; (1) function fncCheckCookie(){   var strCookie=document.cookie; var strName; document.write("<center><hr>クッキーを使う<hr><br><br>"); if(strCookie.indexOf(strCookieName)<0){   strName=prompt("お名前を教えて下さい","名無しのごんべ"); if(strName==null) strName="名無しのごんべ"; document.write("初訪問ありがとう、+"strName"+さん!<br>"); document.cookie=strCookieName+strName;              (2)  }else{   strName=strCookie.substring(strCookieName.length,strCookie. (3) length); document.write("あら、+"strName"+さん、又来てくれたのね"); }   document.write(</center>); } window.onload=fncCheckCookie; //--> </SCRIPT> 質問(1)  1 この文字列は、何故下の「function」の中に含めないのでしょうか?  2 yourName=の「=」は何故必要なのでしょうか?  3 strCookieNameの「str」は何を意味しているのでしょうか? 質問(2)    strCookieName+strNameの意味が分かりません。 質問(3)  1 「length」の意味が分かりません。  2 strCookieName.length,strCookie.lengthの意味が分かりません。 この文で、質問個所以外の所は分かります。 質問が長くなりましたが、よろしくお願いします。

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

    お世話になっております。 只今、アクセス解析を作っておりまして、クッキーの意義を見直したく質問させて下さい。 と、申しますのも、以下のようなスクリプトを設置しているのですが、殆どの人が初めての訪問者として認識してしまう状況となっております。 #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
  • グーグルのメタタグ

    FC2のブログにメタタグいれたいんですけど エラーがでます。。 エラーの内容は 「 確認メタ タグがページ内の間違った場所にあります。ページの最初の <HEAD> セクションに挿入してください。」 です。 どこにメタタグをはりつけたらいいかイマイチわかりません。。 テンプレは、全部表示しませんが、こんなかんじです。 どこにメタタグ張ればいいでしょうか? ↓ <?xml version="1.0" encoding="euc-jp"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html lang="ja" dir="ltr" xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <meta name="author" content="<%author_name>" /> <meta name="description" content="<%introduction>" /> <meta name="keywords" content="<%blog_name>" /> <script language="JavaScript"><!-- function mySetCookie(myCookie,myValue,myDay){ myExp = new Date(); myExp.setTime(myExp.getTime()+(myDay*24*60*60*1000)); myItem = "@" + myCookie + "=" + escape(myValue) + ";"; myExpires = "expires="+myExp.toGMTString(); document.cookie = myItem + myExpires; } function myGetCookie(myCookie){ myCookie = "@" + myCookie + "="; myValue = ""; myStr = document.cookie + ";" ; myOfst = myStr.indexOf(myCookie); if (myOfst != -1){ myStart = myOfst + myCookie.length; myEnd = myStr.indexOf(";" , myStart); myValue = unescape(myStr.substring(myStart,myEnd)); } return myValue; } // --></script> <script language="JavaScript"><!-- function showMore(varA1, varB1){ var123 = ('varXYZ' + (varA1)); varABC = ('varP' + (varA1)); if( document.getElementById ) { if( document.getElementById(var123).style.display ) { if( varB1 != 0 ) { document.getElementById(var123).style.display = "block"; document.getElementById(varABC).style.display = "none"; } else { document.getElementById(var123).style.display = "none"; document.getElementById(varABC).style.display = "block"; } } else { location.href = varB1; return true; } } else { location.href = varB1; return true; } } // --></script> <title><%sub_title> <%blog_name></title> <link rel="stylesheet" type="text/css" href="<%css_link>" media="screen,tv" title="default" /> <link rel="alternate" type="application/rss+xml" href="<%url>?xml" title="rss" /> <link rel="alternate" type="application/rss+xml" title="ROR" href="sitemaps.xml" /> <link rel="top" href="<%url>" title="トップ" /> <link rel="start" href="<%url>" title="最初の記事" /> <!--preventry--><link rel="prev" href="<%preventry_url>" title="<%preventry_title>" /><!--/preventry--> <!--nextentry--><link rel="next" href="<%nextentry_url>" title="<%nextentry_title>" /><!--/nextentry--> <META name="verify-v1" content="String_we_ask_for"> </head> <body> <div id="outline"> <!--▼▼ ヘッダー ▼▼-->

    • ベストアンサー
    • HTML
  • cookieファイル内の情報を取得したい

    cookieについて勉強しています。基本的なご質問で恐縮ですが、ウェブサイトを訪問するとローカル端末に作成されるcookieの情報をHTMLで表示させたいです。自作ではまだウェブサイトをつくるパワーがないので、試しに世の中にあるウェブサイト(ここではグーグル)がつくるcookieファイルを使ってやろうとしています。ブラウザ(私の多端末はWindows7のIE9です)でwww.google.co.jpにアクセスすると、自分の端末の以下の場所にcookieファイルが生成されました。 C:\Users\xxxx.YYYY\AppData\Local\Microsoft\Windows\Temporary Internet Files\cookie:xxxx@google.co.txt このファイルをエディタで開くと、以下のようになっていました。 PREF ID=4ab55a93d0148b7d:U=a00ee244ee99cb93:FF=0:TM=1349938263:LM=1349938263:S=rhLUd9XxPzZ5-TNF google.co.jp/ 1536 3106219392 30401823 3268590307 30254972 * NID 64=EkcjkwCpyPQicgDbEWkZybwel5v7EZMd78bJguXVfuxck6k2aAbVN4PxDsZXD0t29ZwLjf7mxKjyLY010Jb-vp3YPXFi_iWztaVVnnXc_qEzaNMjBm9apRKjrePE5w1L google.co.jp/ 9216 422569344 30291786 3267065307 30254972 * 一旦サーバにアクセスした後は、サーバがクライアントを同一端末だとわかるためにクライアント側から何らかの形でこのcookieファイル内のIDを渡すものだと理解しています。今、やりたいのは、単純にこのIDをHTMLで表示するだけです。HTML内にJavaScriptを書いて、JavaScriptのcookieを取得してdocument.writeで表示するようなことはできるのでしょうか。インターネット上に以下のような関数があったので使ってみたのですが、"undefined"とだけブラウザに表示されて動作しません。何がおかしいのでしょうか? <html> <head> </head> <body> <script type="text/javascript"> function getCookie(name) { if (!name || !document.cookie) return; var cookies = document.cookie.split("; "); for (var i = 0; i < cookies.length; i++) { var str = cookies[i].split("="); if (str[0] != name) continue; return unescape(str[1]); } return; } var cookieValue = getCookie("ID"); // ID というクッキー名の値を取得 document.write(cookieValue); </script> </body> </html> よろしくお願いします。

  • プルダウンの値とJavaScript

    下記のようなソースでHTMLのID、パスワードを入力しログを閲覧する画面を作成しました。 プルダウンで今月のログか先月のログを選択するようにしたいと思いますが、 value値の所にJavaScriptの値を入力したいと思っていますが上手くいきません。 具体的には、<OPTION value="1">の1の代わりにdlogの値を<OPTION value="2">の2の 代わりにllogの値を入力したいと思っています。 宜しくお願い致します。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE></TITLE> <SCRIPT Language="JavaScript"> <!-- myDate = new Date(); myYear =1900+(myDate.getYear()%1900); dYear =(myDate.getYear() % 100); myMonth =myDate.getMonth() + 1; lastMonth =myDate.getMonth(); if (myMonth<10){ dtMonth=("0"+(myDate.getMonth()+1)); } else {dtMonth =myMonth; } if (myMonth<10){ dlMonth=("0"+(myDate.getMonth())); } else {dlMonth =(myDate.getMonth()); } dlog =(dYear+""+dtMonth+"_log.txt"); if (myMonth == 1){ llog=(dYear-1+""+"12_log.txt"); } else {llog=(dYear+""+dlMonth+"_log.txt"); } // --> </SCRIPT> </HEAD> <BODY> <P align="center"><FONT size="+2"><B>ログファイル閲覧メニュー</B></FONT></P> <HR width="75%"> <form action="../cgi-bin/mail/mail.cgi" method="post"> <CENTER> <TABLE border="0"> <TBODY> <TR> <TD>User ID:</TD> <TD colspan="2"><INPUT size="24" type="text" name="u_id"></TD> </TR> <TR> <TD>Pass Word:</TD> <TD colspan="2"><INPUT size="24" type="password" name="pass"></TD> </TR> <TR> <TD>表示するログ</TD> <TD><SELECT name="log"> <OPTION value="1"> <SCRIPT Language="JavaScript"> <!-- document.write("今月:",myYear,"年",myMonth,"月"); // --> </SCRIPT> </OPTION> <OPTION value="2"><SCRIPT Language="JavaScript"> <!-- if (myMonth == 1){ document.write("先月:",myYear-1,"年12月"); } else {document.write("先月:",myYear,"年",lastMonth,"月"); } // --> </SCRIPT> </OPTION> </SELECT></TD> <TD><INPUT type="submit" name="submit" value="閲覧"></TD> </TR> </TBODY> </TABLE> </CENTER> </FORM> </BODY> </HTML>

  • JavaScriptにて表示させる時計の横に文字を入れる方法

    お世話になります。 この度、HPを作成して公開しているのですが、訪れてくれる方の数も少なくその対応策を考えています。 その1つとして、JavaScriptにて作成されたカレンダーを表示させようと考えています。(今のHPは全て、HTMLにて記述しております。) しかしHTML&JavaScript初心者の為、カレンダーの横に文字を表示させる事が出来ません。 つきましては、カレンダーを左端に表示させて、右側の空白部に標題及び訪問者カウンター(JavaScript)を記す方法をご教示頂けます様お願いします。 参考までに、表示させたい標題+カウンターのコードを以下に記します。 【HTML】 <h1>?????????</h1> <h1>「 ???????????? 」</h1><br> <h3><!-- FC2カウンター ここから --> <script language="JavaScript" type="text/javascript" src="http://counter1.fc2.com/counter.php?id=*******"></script><noscript><img src="http://counter1.fc2.com/counter_img.php?id=********"><br><strong><a href="http://seotaisaku.co.jp">SEO対策</a></strong></noscript> <!-- FC2カウンター ここまで --><BR> <!-- FC2オンラインカウンター ここから --> 現在の閲覧者数:<script language="JavaScript" type="text/javascript" src="http://counter1.fc2.com/views.php?id=*******"></script><noscript><img src="http://counter1.fc2.com/counter_now.php?id=******"><br><strong><a href="http://seotaisaku.co.jp">SEO対策</a></strong></noscript></TD></center><BR><BR>

    • ベストアンサー
    • HTML

専門家に質問してみよう