プロが教えるわが家の防犯対策術!

アクセス時からのカウントダウンタイマー設置について質問です。

サイトに設置するカウントダウンタイマーで

例えば、期限を2日間と設定し、
初回の訪問時からカウントできますか?

同じ人が2回目にサイトを訪問した場合は
初回からカウントされた時間の続きになります。

ですから、訪問者1人1人 訪問時間が違うわけですから、
それぞれ期限が異なることになります。

このような設定のスクリプトは可能でしょうか?

A 回答 (13件中1~10件)

そういうのを「クッキー」って言います。


サイト側ではなく、クライアントが自分で管理する機能ですね。
ということで、クッキーを使ったプログラムを調べれば
いろいろサンプルが出ますよ。
がんばってね
    • good
    • 0
この回答へのお礼

ご回答いただきましてありがとうございます。

早速検索をかけてみたのですが
なかなか見つかりません。

もし可能でしたら
スクリプトを教えていただけると有り難いです。

お礼日時:2010/06/21 19:37

http://www.sasaraan.net/program/js/jscookie.html

onload時にCookieを読み出し、
setIntervalで持ち時間を減らす関数を1秒おきに呼び出し、
と同時にCookieに持ち時間の残りを書き出す。
そして持ち時間が0になったらclearTimeout。
という具合にやっていけばいいんじゃ無いでしょうか。

以下、試してみたけどたぶんNG箇所があると思います。関数名も適当^^;
持ち時間は仮に20秒にしてあります。

<html lang="ja">
<head>
<meta http-equiv="Content-Script-Type" content="text/javascript">

<title>タイトル</title>
<script type="text/javascript">
<!--
function WriteCookie( key, v ){
var str = key + "=" + escape( v ) + ";";
var dt = new Date();
dt.setDate( dt.getDate() + 365 );//Cookieを1年間保存
str += "expires=" + dt.toGMTString() + ";";
document.cookie = str;

return false;
}

function ReadCookie( key ){
var sCookie = document.cookie;
var aData = sCookie.split(";");
var oExp = new RegExp(" ", "g");
key = key.replace(oExp,"");
var i = 0;
while ( aData[i] ) {
var aWord = aData[i].split("=");
aWord[0] = aWord[0].replace( oExp,"");
if( key == aWord[0] ) return unescape(aWord[1]);
if( ++i >= aData.length ) break;
}
return "";
}
function yourTime(){
var o = document.getElementById('utime'); if( !o ) return false;
o.value = restTime + "秒";
if( restTime <= 0 ){
clearInterval( timerID );
window.alert("持ち時間を使いきりました。");
}else{
restTime--;
}
WriteCookie("RTIME", restTime );
}
function getYourTime(){
restTime = ( ReadCookie("RTIME") ? parseInt( ReadCookie("RTIME") ) : 20 );
if( restTime )timerID = setInterval( yourTime ,1000);
else window.alert("持ち時間を使いきっています。");
}
window.onload = function(){
getYourTime();
}
//-->
</script>
</head>
<body>
<form name="form1" id="form1" action="#" onsubmit="return WriteCookie('RTIME)">
<p><label for="utime">貴方の持ち時間:<input type="text" id="utime" value=""></label>
</form>
</body>
</html>
    • good
    • 0

さっそく訂正:


onsubmit="return WriteCookie('RTIME)"
は無しで;;
    • good
    • 0
この回答へのお礼

大変ご丁寧にご返答いただきまして
ありがとうございます。

2日後に設定するにはどうしたらよいでしょうか。

またフォーム形式になっていますが
テキスト文字だけにすることは可能ですか?

ご教授お願い致します。

お礼日時:2010/06/21 22:14

ぼそっと。



escape および unescape かんすうは
https://developer.mozilla.org/ja/Core_JavaScript …
    • good
    • 0
この回答へのお礼

ご回答いただきましてありがとうございます。

こちらのURLですが、
勉強不足でして^^;

すみません。

お礼日時:2010/06/21 22:16

今回のご質問の解決点は「Cookieを使うんだ」という点だと思います。



スクリプトはとりあえず動いたのでオマケで載せただけです。
その中にキーワードが含まれてそうだったので。
escapeやunescapeが何の働きをしてるかわかっていませんし;
非推奨?なのも知らないぐらいで^^;

だから自分が偉そうに言うことでは無いんですけど、
正しく動くスクリプトが欲しいならそれを待つも良し、
がんばって自分で作ってみたけど動かない等の場合に再質問、
というのが適切では無いでしょうか。
    • good
    • 0

zeff さんへ



きをわるくしないでね。

ほかで、taloo さんがおっしゃっられていましたが、
>他の回答者からのツッコミがないというのが最大の欠点

まったく、そのとおりだとおもいます

ほかのかたがたのように、てきかくな「資料」をていじしませんが
「ぼそっと」は、つづくかな?

わたしに、がっつんとつっこむと、へこみ(&むつける(方言))ますが、ぬる~ぃのならOK!
    • good
    • 0

>babu_babooさんへ



いやいや、ぜんぜんそんなことはないですよ^^

大した引き出しもないのに出しゃばって失敗したなぁと思って;
まだまだわからないことが多いので、
慎重に回答しないとならないなぁと反省しておるところです。

それに誤りや間違いを指摘されるのは自分も勉強になるし、
悪い気どころか逆に「ありがとう」という気持ちです。
ですので、ほんとにお気になさらずに^^
    • good
    • 0

かいてみた。

やっぱりむだにながいので、ぶんかつです。
ぜんかくくうはくは、はんかくにでもして。

2にちたってみないと、むしとりできませ~ん!?

<!DOCTYPE html>
<title></title>
<style type="text/css">
body { background : black; color: red; }
p { font-size:200%; }
p.cm { font-size: 400%; color: green; }
p.cm2 { font-size: 100%; color: yellow; }
<style type="text/css">
</style>

<body>

<p id="mess">有効期限は、初めてページを閲覧してから2日です</p>
<p class="cm">花火大会開催中!!</p>
<p class="cm2">(出場者募集中、商品はなんと「黒豆10粒」)</p>

<script type="text/javascript"><!--
(function (doc) {

 function addDay ( day, date ) {
  if( 'number' !== typeof day ) day = 0;
  if( 'object' !== typeof date ) date = new Date;
  return (date.setDate( date.getDate() + day ), date);
 }

 function getCookie ( name ) {
  name = encodeURIComponent( name ).replace( /([.*()]) /g, '\\$1' );
  var value = doc.cookie.match( RegExp( name + '\\s*=\\s*(.*?)(?:[\\s;,]|$)' ) );
  return value ? decodeURIComponent( value[1] ): '';
 }

 function setCookie ( name, value, day, path, domain ) {
  return doc.cookie = encodeURIComponent (name) + '=' + encodeURIComponent (value) +
   '; ' + 'expires=' + ( addDay(day) ).toUTCString () + '; ' + (path ? 'path=' + encodeURI (path) + '; ': '') +
   (domain ? 'domain=' + encodeURI (domain) + '; ': '');
 }
 function padding ( n ) { return n < 10 ? '0' + n: n; }
    • good
    • 0

 //その2_________________________


 
 var COOKIE_NAME = 'myCount';
 var LIMIT_DAY = 2;
 var SHELF_LIFE = 10;
 var TIMEOUT_MESS = 'おとといきやがれぇ~!';

 var node = doc.getElementById( 'mess' );
 var targetDay = parseInt( getCookie( COOKIE_NAME ) );

 if( !targetDay ) {
  targetDay = addDay(2).getTime();
  setCookie( COOKIE_NAME, targetDay + '', SHELF_LIFE );
 }

 (function () {
  var text = '花火点火まであと、';
  var s = (targetDay - (new Date).getTime()) / 1000 |0;

  if (s < 0)
   text = TIMEOUT_MESS;

  else {
   text += padding( s / 86400 |0) + '日と' +
    padding( s % 86400 / 3600 |0) + '時間' +
    padding( s % 3600 / 60 |0) + '分' +
    padding( s % 60 |0) + '秒です';
   setTimeout (arguments.callee, 1000);
  }

  node.firstChild.nodeValue = text;
 })();
})(this.document);

//-->
</script>
    • good
    • 0

興味深かったので、URIエンコード関数を一通り調べてみました。



encodeURIComponent - MDC
https://developer.mozilla.org/ja/Core_JavaScript …
decodeURIComponent - MDC
https://developer.mozilla.org/ja/Core_JavaScript …
encodeURI - MDC
https://developer.mozilla.org/ja/Core_JavaScript …
decodeURI - MDC
https://developer.mozilla.org/ja/Core_JavaScript …

javascript: escape(), encodeURI(), encodeURIComponent() 比較 (groundwalker.com)
http://groundwalker.com/blog/2007/02/javascript_ …
You Look Too Cool ? JavaScriptのescapeとencodeURIとencodeURIComponentの違い
http://stabucky.com/wp/archives/554

encodeURIComponent() は知っていたけど、encodeURI() は知らなかったなあ。

-------
var uri = 'http://example.com/search?foo=テスト& foo=&hoge=*!"(),/.&end';
alert (encodeURI(uri)); // http://example.com/search?foo=%E3%83%86%E3%82%B9 …
alert (encodeURIComponent(uri)); // http%3A%2F%2Fexample.com%2Fsearch%3Ffoo%3D%E3%83%86%E3%82%B9%E3%83%88%26%20foo%3D%26hoge%3D*!%22()%2C%2F.%26end
-------

・encodeURIComponent() はGETパラメータなどにURIを埋め込むときのために完全にURIエンコードする。
・encodeURI() はURIとしてはほぼ正しいのだけど、URIエンコードの取りこぼしがある場合において安全な文字にエスケープする。

encodeURI() は「引数にとる値がURIとして正しい文字列である必要がある」ので、使いどころが難しいですね。
万全を期すならば、URIをパースする必要があるのではないかと思います。
例えば、#8 で babu_babooさん は encodeURI (domain) を使われていますが、「domain が正しいURIであること、をどこで保証するのか」って問題が出てきそうです。
私ならそういうのを考えるのが面倒なので、encodeURIComponent() で強制的にエンコードする方法をとるかもしれない…。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!