Cookieの回数で閲覧制限、javascript

このQ&Aのポイント
  • javascriptで閲覧回数と閲覧日付に基づいて制限をかけるコンテンツの作成方法を教えてください。
  • 現状では1日に何回もページを閲覧できてしまうため、深夜12時過ぎになったら再度閲覧できるようにしたいです。
  • 初心者でうまくいかないので、どこが間違っているのか教えてください。
回答を見る
  • ベストアンサー

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> ----------------------------------

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

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 細かいところまで見ていないので違っているかもしれませんが、前回訪問日を初回にセットしたのみで2度以上の訪問でクッキーに書き込まれていない気がします。 (現状ですと初回当日の閲覧は制限がかかると思いますが、翌日以降は制限がかからない状態だと思います) 最後のカウンター更新、名前の更新とさらに前回訪問日の設定が必要ではないでしょうか。 また今回の不具合には関係無いですが、myCountの値ですが初回時に1からスタートするとmyCount = myCount + 1にて加算されますので始めてのアクセス時に作成されるクッキーのUSER_COUNTERは2からスタートしてしまいます。

potwell331
質問者

お礼

ありがとうございました! 名前の更新とさらに前回訪問日の設定を追加したらうまくいきました!

関連するQ&A

  • 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> ----------------------------------

  • JavaScriptの勉強を始めました。

    あるサイトを見ながらJavaScriptの勉強を始めました。 まだ初歩の初歩です。 <script language="JavaScript"> <!-- myD = new Date(); myYear = myD.getYear(); myYear4 = (myYear < 2000) ? myYear+1900 : myYear; myMess = myYear4; document.write( myMess ); --> </script> こういったコードがあったのですが、 myYear4 = (myYear < 2000) ? myYear+1900 : myYear; この部分をifで置き換えれるのかなと思い、下記のコードを作ってみました。 <script language="JavaScript"> <!-- myD = new Date(); myYear = myD.getYear(); if ( myYear < 2000 ){ myD = myYear + 1900; }else{ myD = myYear; } myMess = myYear; document.write( myMess ); --> </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
  • JavaScriptについて

    現在JavaScriptを書いていますが下記の表記ではまったく表示できません。 <SCRIPT language="JavaScript"> <!-- document.write("ただいま"myYear"年",myMonth+1, "月",myDate,"日",myHours,"時",myMinutes,"分です"); //--> </SCRIPT> しかし、下記の表記では正常に表示できます。 <SCRIPT language="JavaScript"> <!-- with(document){ write(myYear); write("年"); write(myMonth); write("月"); write(myDate); write("日"); write(myHours); write("時"); write(myMinutes); write("分"); } //--> </SCRIPT> もちろん関数は正常に作られています。 なぜだかわかりますか? 教えてください。 以上

  • 画面の表示が出なくなりました。

    ここ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
  • 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
  • プルダウンの値と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>

  • グーグルのメタタグ

    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を削除する方法

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

  • 【javascript】 年齢計算

    初心者です。 イヌでもわかるjavascript講座(http://www.red.oit-net.jp/tatsuya/java/)より拝借して、年齢計算のプログラムをつくっています。 しかし、これでやると、閏年がない年でも、フツウに計算できてしまいますし、「32日」などでも入力できてしまいます。 これを改造して、正確でない日付を入力できないようにしたいのですが、インターネットなどを調べても、どのようにしたらよいのか、見当もつかず困っております。 お手数ですが、どのようにしたらよいのか、そしてできたら、考え方などもお教えくださいませ。 以下がそのソースです。 <HTML> <HEAD> <TITLE></TITLE> <script language="javascript"> <!-- function myAge(N){ //現在から、誕生日を引き、基準日に足す //つまり、現在から、誕生日の日にち分の時間だけ引く Today = new Date(); myBirth = new Date(1970 , 0 , document.myFormAge.myAgeD.value ); myBirth.setTime(Today.getTime()-myBirth.getTime()); //求めた年月日から基準日を引く myYear = myBirth.getUTCFullYear() - document.myFormAge.myAgeY.value; myMonth = myBirth.getUTCMonth() - (document.myFormAge.myAgeM.value - 1); if(myMonth < 0){ //月がマイナスなので年から繰り下げ myYear --; myMonth += 12; } myDate = myBirth.getUTCDate(); document.myFormAge.Age.value = ""+myYear+""; } //--> </SCRIPT> </HEAD> <BODY> <FORM name="myFormAge"> 生年月日を入力してください。 <br> <br> 年(西暦)<INPUT type="text" size="4" name="myAgeY"> 月<INPUT type="text" size="2" name="myAgeM"> 日<INPUT type="text" size="2" name="myAgeD" onKeyDown="myAge(this.form)"> <br> <br> <br> <br> <br> <INPUT type="text" size="5" name="Age">歳 </FORM> </BODY> </HTML> よろしくご教授くださいませ。