Cookieの有効期限を半年にする方法

このQ&Aのポイント
  • プログラムを修正してCookieの有効期限を半年に伸ばす方法について教えてください。
  • 現在のCookieの有効期限を見るために、プログラムの一部を確認しました。
  • 具体的には、セッションの有効期限をセットする部分を修正する必要があります。
回答を見る
  • ベストアンサー

Cookieの有効期限について

Cookieの有効期限を半年間にしようと思い、 プログラムを覗いてみたところ、以下のような記述がありました。 どこをいじれば半年間に伸ばすことができるのか教えていただけますか? どうかよろしくお願いいたします。 sub set_cookie { ($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + 30*24*60*60); $yearg += 1900; if ($secg < 10) { $secg = "0$secg"; } if ($ming < 10) { $ming = "0$ming"; } if ($hourg < 10) { $hourg = "0$hourg"; } if ($mdayg < 10) { $mdayg = "0$mdayg"; } $month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')[$mong]; $youbi = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')[$wdayg]; $date_gmt = "$youbi, $mdayg\-$month\-$yearg $hourg:$ming:$secg GMT"; $cook="name\:$FORM{'cntr'}\,email\:$FORM{'email'},pswd\:$FORM{'pswd'}"; print "Set-Cookie: TORBBS=$cook; expires=$date_gmt\n"; }

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

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

  • ベストアンサー
  • bakusui
  • ベストアンサー率39% (9/23)
回答No.1

($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + 30*24*60*60); 上記の30が30日ですから半年にしたいなら183にすればOKでしょう。 すると$date_gmtが今日から半年後の日付になると思います。 全ソースみてないので他のコードに不備があればわかりませんが・・・

masa-25
質問者

お礼

ご丁寧にありがとうございます! 早速やってみたいと思います♪

関連するQ&A

  • クッキーの保存場所

    今、自分でCGIで掲示板にクッキー機能をつけているところなのですが、保存されたクッキーファイルのありかがよく分かりません。 Windows XP → 「\Documents and Settings\ユーザ名\Cookies\」 とあるページに書いてあったので、そのフォルダをみてみたのですが、他のクッキーファイル(ユーザ名@aabbcc.txt といったファイル)はあるのですが、自分で作った掲示板のクッキーファイルらしいものがありません。でも、掲示板のクッキー機能は働いているようです。 一応クッキー保存ルーチンを以下に示します。 sub set_cookie { ($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + 60*24*60*60); $yearg += 1900; $date_gmt = "$youbi, $mdayg\-$mong\-$yearg $hourg:$ming:$secg GMT"; $cookies="name\:$FORM{'name'}\,email\:$FORM{'email'},url\:$FORM{'url'},pass\:$FORM{'pass'}"; print "Set-Cookie: SAMPLE=$cookies; expires=$date_gmt\n"; }

    • ベストアンサー
    • CGI
  • 掲示板のcookieが消える?

    自分のサイトに設置してあるBBSなんですが、cookieで名前やメアドを記憶しているはずが、ある日を境に出なくなったんです。 cookieは60日間有効にするために、以下のように書いています。 local($sec,$min,$hour,$mday,$mon,$year,$wday) = gmtime(time+60*24*60*60); @month=('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); $gmt = sprintf("%s, %02d-%s-%04d %02d:%02d:%02d GMT", $week[$wday],$mday,$month[$mon],$year+1900,$hour,$min,$sec); $cook="name<>$in{'name'}\,email<>$in{'email'}\,url<>$in{'url'}\,pwd<>$in{'pwd'}\,icon<>$in{'icon'}\,color<>$in{'color'}"; そして、これをprintで書き出しているのですが、なぜ消えてしまうんでしょう? 設定の仕方が間違っています?

  • 書き込んだばかりのcookieが読み込めません

    cookieを書込んだ直後、書込めたか(cookieをオフにしていたり、cookieを書込めない携帯端末からのアクセスかもしれないので)確認をしようと、cookieを読込もうとしたのですが、cookieが書込まれているにもかかわらず情報を取得することができません 実験環境として、htmlファイルにボタンを作って、cgiへ飛び、そのcgi内でcookieを書込み、cookieが書込めたかどうかで分岐して、表示するようにしています (cgiを一度実行したあと一旦ブラウザで前のhtmlファイルに戻って)cookieが既に書込まれた状態で、改めてhtmlファイルのボタンを押せばcookieは読込めますが、最初にcookieを書込んだ時に同じcgi内で即読込みを行ったら読込めません 書込が完結する前に読込みに行っているから読込めないのかとも思い、読込み前にタイムラグを作っても見ましたがやはり読込めません どうすれば書込み直後に読み込めるのでしょうか? 色々ネットで調べても見ましたが、いっこうに解決策が見つかりません ご存じの方ぜひご教授下さい よろしくお願いします なお、下にperlのコードを書いておきます #クッキーを書込 $test{sid} = "12345"; &set_cookie($test{sid}); #タイムラグ use Time::HiRes; Time::HiRes::sleep(0.8); #クッキーを読込 ($cookie{test}) = &get_cookie; if(!$cookie{test}){ print "読み込めてない"; } else{ print "読み込めた"; } ######→読み込めません##### #クッキー書込sub sub set_cookie { local(@cook) = @_; local($gmt, $cook, @t, @m, @w); @t = gmtime(time + 2*60*60); @m = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); @w = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); $gmt = sprintf("%s, %02d-%s-%04d %02d:%02d:%02d GMT", $w[$t[6]], $t[3], $m[$t[4]], $t[5]+1900, $t[2], $t[1], $t[0]); foreach (@cook) { s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; $cook .= "$_<>"; } print "Set-Cookie: SID=$cook; expires=$gmt; path=/;\n"; } #クッキー読込sub sub get_cookie { local($key, $val, *cook); $cook = $ENV{'HTTP_COOKIE'}; foreach ( split(/;/, $cook) ) { ($key, $val) = split(/=/); $key =~ s/\s//g; $cook{$key} = $val; } foreach ( split(/<>/, $cook{'SID'}) ) { s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg; push(@cook,$_); } return (@cook); }

    • ベストアンサー
    • Perl
  • cookieについて教えてください。

    iswebのサーバーを借りています。 cookieの書きこみを下のような記述を試しています。 ($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime(time + 60*60*3); @mons = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); @week = ('Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sut'); $date = sprintf("%s, %02d\-%s\-%04d %02d:%02d:%02d GMT",$week[$wday], $mday, $mons[$mon], $year+1900, $hour, $min, $sec); $mydata = "abc"; print "Set-Cookie: AAA=$mydata; expires=$date;"; print "Content-type: text/html\n"; print "\n"; print "<meta http-equiv="Set-Cookie" content="AAA=$mydata; expires=$date">"; 以下いろいろつづく。 この時にSet-Cookie: AAA=$mydata; expires=$date;";を残すとエラーが出てmetaを残すと動きます。 自分のパソコンの中では、両方動きます。 そこで教えていただきたいのですが、 javascriptのdocument.cookie、perlのSet-Cookie、metaのSet-Cookieの違いを教えてください。

    • ベストアンサー
    • Perl
  • フォーム内容を上から順番にJavaScriptでCookieに入れて、また戻す方法

    フォームにかかれている内容を上から順番にCookieに入れて 次にそのページに来たときに読みこれるようにしたいのですが、わからなくなってしまいました。 まず下記でJavaScriptに値を渡します。 onClick="saveCookie(this.form.elements[0].value,this.form.elements[1].value,this.form.elements[2].value) 次にJavaScriptで処理します。 ----------------------------------------------- xDay = new Date; xDay.setYear(xDay.getYear() + 1); xDay = xDay.toGMTString(); cook = new Array(); function saveCookie(value01,value02,value03){ cook[0] = value01; cook[1] = value02; cook[2] = value03; cooks = escape(cook[0]); i = 1; while (cook[i]){ cooks += "%00" + escape(cook[i]); i++; } document.cookie = "fat_cookie=" + cooks + "; expires=" + xDay; } function loadCookie(){ cooklng = document.cookie.length; cook = document.cookie.split("; "); cooks = ""; i = 0; while (cook[i]){ if (cook[i].substr(0,11) == "fat_cookie="){ cooks = cook[i].substr(11,cook[i].length); break; } i++; } cook = cooks.split("%00"); ??? = unescape(cook[0]); ←ここがわかりません。 } window.onload=loadCookie; ----------------------------------------------- Cookieに保存して、またバラバラにするところまでは出来たのですが 最後にフォームに戻すところでわからなくなってしまいました。 色々試したのですがうまくいきません。 どなたかわかる方いらっしゃいましたら、 よろしくお願いします。

  • PHPでのCookie

    PHPでクッキーを使い、下記のような入力フォームを作りました。 form.phpで入力→form2.phpで正常出力出来るのですが、 form2.phpで一度更新しないと、結果が画面に表示されません。 これをform2.phpを開いた時点で表示されるようにするには、どのように書けばいいのでしょう。 後1つあります。form.phpで 「テスト&1」と書くと「テスト」としか表示されなく、&とそれ以降が記憶されません。 これはなぜでしょうか? お願いします。 【form.php】 <?PHP parse_str($_COOKIE["city"]); parse_str($_COOKIE["city_name"]); ?> <html> <form method="post" action="form2.php"> <?PHP echo "名前1<input type=text name=name1 maxlength=16 size=12 value=$set_name1> <BR>ID<input type=text name=p1 maxlength=8 size=6 value=$set1><BR><BR>"; echo "名前2<input type=text name=name2 maxlength=16 size=12 value=$set_name2> <BR>ID<input type=text name=p2 maxlength=8 size=6 value=$set2>"; ?> <input type="submit" value="実行"> </form> </html> 【form2.php】 <?php if ($_POST) { $city1 = $_POST["p1"]; $city2 = $_POST["p2"]; $city_name1 = $_POST["name1"]; $city_name2 = $_POST["name2"]; setcookie ("city", "set1=$city1&set2=$city2",time()+3600*24*90); setcookie ("city_name", "set_name1=$city_name1&set_name2=$city_name2",time()+3600*24*90); } parse_str($_COOKIE["city"]); parse_str($_COOKIE["city_name"]); echo $set_name1; echo $set1; echo $set_name2; echo $set2; ?>

    • ベストアンサー
    • PHP
  • 前に入力したデーターに戻ってしまいます。

    こちらの作成掲示板を使用させていただいているのですが。 http://www.big.or.jp/~t-shun/trpg/trpg_cgi/dicebbs/dbbs-sw.html 何度か続けて、同じ種族で作成する場合、一回ずつ選択しないですむようにできないか、と思いまして、 ## --- クッキーの発行 $cook="name\:$name\,email\:$email\,url\:$url\,pwd\:$pwd, ※dcheck\:$dcheck"; ## --- クッキーを取得 $c_name = $COOKIE{'name'}; $c_email = $COOKIE{'email'}; $c_url = $COOKIE{'url'}; $c_pwd = $COOKIE{'pwd'}; ※$c_dcheck = $COOKIE{'dcheck'}; if ($FORM{'cook'} eq 'on') { if ($name) { $c_name = $name; } if ($email) { $c_email = $email; } if ($url) { $c_url = $url; } if ($pwd) { $c_pwd = $pwd; } ※ if ($dcheck) { $dcheck = $dcheck;} ※部分を追記しました。 最初に選んだ種族の複数作成はうまくできたのですが、 別種族を選択した際に、一度別種族で作成した後、前に選んだ種族にチェックが入ってしまいました。 これを前に選んだ種族に戻さないようにするには、どのような方法があるのか、教えていただきたいのです。

    • ベストアンサー
    • CGI
  • 次のカウンターのCGIプログラムで間違っているところはどこでしょうか?

    参考書を手にしながら次のようにCGIを作成しましたが、上手く動きません。 個人別カウンター(アクセスしてきた個人ごとにカウンターが変わる)CGIです。 いろいろ調べたのですが、どこが間違っているのか分からなくなりました。 どうぞお願いいたします。 ======= #!/usr/local/bin/perl $cookie = $ENV{'HTTP_COOKIE'}; @array = split(/; /, $cookie); foreach $tmp (@array){ ($key, $value) = split(/=/, $tmp); if($key eq 'count'){ $count = $value; } } if( $key == ""){ $count = 0; } $count++; ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = gmtime(time + 60*60*24*30); @day = ("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "sat"); @month = ("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Set", "Oct", "Nov", "Dec"); $expireDate = sprintf("%s\, %02d\-%s\-%04d %02d:%02d:%02d GMT", $day[$wday], $mday, $month[$mon], $year+1900, $hour, $min, $sec); print "Content-Type: text/html\n"; print "Set-cookie: count=$count; expires=$expireDate \n\n"; Print "<html>\n"; Print "<title>counter4</title>\n"; print "<body>\n"; print "<h1>個人別カウンター</h1>\n<hr />"; print "あなたは$count回目のご訪問です。\n"; print "</body>\n"; print "</html>"; exit;

    • ベストアンサー
    • CGI
  • 下のCookieの質問に関しまして補足です その2

    さらに調べていたのですが、どうやら登録されているURLのデータに「=」が含まれていると 上手くいかないことが解りました。 以下のスクリプトで保存及び抽出データに「=」が含まれていても上手く処理する方法は無いでしょうか。 #***************************************************************************** sub plink{ #パーソナルリンク &error("現在、パーソ\ナルリンクは使用出来ません。") if !($personallink); my ($a1,$a2,$a3,%temphash); for $a1(split(/; */,$ENV{'HTTP_COOKIE'})){ ($a2,$a3) = split(/=/,$a1); $a3 =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg; if ($a2 eq 'plink_list'){ foreach(split(/<>/,$a3)){ $temphash{$_}=1; } last; } } &filelock("linkdata"); open (IN,"$linkdata"); while(<IN>){ if ($temphash{(split(/<>/,$_))[15]}){ $totalct++; push(@site,$_) if ($totalct >= $startnum) && ($totalct <= $endnum); } } close (IN); &fileunlock("linkdata"); $endnum = $totalct if $totalct < $endnum; $startnum = 0 if $totalct == 0; $action = "パーソ\ナルリンク"; &searchbar("","<option value=\"\" selected>$searchtitle\n"); &databar(); if ($totalct != 0){ $resultmessage = "$totalct件のリンクが登録されています。<br /><br />"; &linkbar("act=$act&line=$line&indi=$indi"); &siteindicate("",@site); }else{ $resultmessage = "登録が無いか、クッキーが有効になっていません。<br /><br />"; $linkbar = $siteindicate = ""; } &html_output; } #***************************************************************************** sub plink_add{ #パーソナルリンク追加 &error("現在、パーソ\ナルリンクは使用出来ません。") if !($personallink); &get_cookie; $plink_list.=$url."<>" if $plink_list !~ /\Q$url\E/; &set_cookie; &searchbar("","<option value=\"\" selected>$searchtitle\n"); $linkbar = $siteindicate = ""; $action = "パーソ\ナルリンク追加"; $resultmessage = "<b>".&sitename_get."</b> をパーソ\ナルリンクに追加しました。<br />"; &html_output; } #***************************************************************************** sub get_cookie{ #クッキー取得 my ($a1,$a2,$a3); for $a1(split(/; */,$ENV{'HTTP_COOKIE'})){ ($a2,$a3) = split(/=/,$a1); $a3 =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg; if ($a2 eq 'plink_list'){ $plink_list = $a3; last; } } } #****************************************************************************** sub set_cookie{ #クッキー設定 $plist_link =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; print "Set-Cookie:plink_list=$plink_list; expires=Thu, 1-Jan-2030 00:00:00 GMT;\n"; } #**************************************************************************** 宜しくお願い致します。

  • javascriptでのcookieについて

    javascriptでアクセスする人にcookieをつけるようにしています。 cookieの情報をサイト内(同一ドメイン内)で共有したいので、path=/ をつければ良いと思うのですが、以下のソースの場合、どのように記載すればよいでしょうか? <!-- theName="onload_texta="; theday=90; //---------------------------------------------- function onload_text_set(){ theCookie=document.cookie+";"; start=theCookie.indexOf(theName); if(start !=-1){ end=theCookie.indexOf(";",start); theData=theCookie.substring(start+theName.length,end); document.showform.showcheck.checked=(theData=="t")?true:false; if(theData=="f") document.getElementById('show').style.display='block'; else document.getElementById('show').style.display='none'; } else document.getElementById('show').style.display='block'; } function onload_text_close(){ myData="";setDay=new Date(); myData=(document.showform.showcheck.checked==true)?"t":"f"; setDay.setTime(setDay.getTime()+(theday*1000*60*60*24)); document.cookie=theName+myData+";expires="+setDay.toGMTString(); } onload=onload_text_set; onunload=onload_text_close // -->

専門家に質問してみよう