ギークなお姉さんは好きですか

恋焦がれる理想の男性・ギークに近づくため、プログラミングがわかるお姉さんを目指すブログ

6日目 クッキー受け取ってください!

日記

今日はけんすうと一緒にあきやんちに行ってお勉強するはずだったのに、
家庭の事情とか一身上の都合とか私鉄の人身とか風水的に考えて日が悪いとかで
行けなかった・・・(´・ω・`)
どんまいどんまい。
さよならは言わないよ!またいつかリベンジするから!!


とゆことで自習。





訪問者にクッキーを食べさせたい!

クッキーはなんとなく分かる。
でも改めて、クッキーとは何か?を確認しておく。


クッキーとは、サーバにアクセスしてきたブラウザに
対して、一時的にデータを書き込んでおく仕組みです。

参考:改訂新版 基礎PHP


ほうほう。


クッキーとは、クライアント上に保存される小さなテキストのことを言います。
通常、Webの世界では、セキュリティ的な観点から、サーバからクライアントに対して
書き込みを行うことは許されていません。
しかし、クッキーだけが唯一の例外で、サーバがクライアント側になにかしらの情報を
残したいと思った場合には、まずクッキーを利用する必要があるのです。

参考:10日でおぼえるPHP5 入門教室



了解!このへんは大丈夫。
一度書き込んだ掲示板に、次回からはデフォで名前が入るようになるとか、そゆことだよね?
でもネカフェのPCからアクセスした場合は、名前は入らない。
ということは、当たり前だけどサーバが私からのアクセスと判断している基準は
ブラウザってこと。
IPではない、というのは、同じPCからぷにるでアクセスしたときは覚えてる情報も、
FireFoxからアクセスすると覚えていない、という実験から分かる。
ブラウザって地味にいい仕事するよね。今さらだけど。



訪問回数によって表示を変えてみよう

あああ!これはアレか!
ホームページ1.0みたいなサイトで 「○回目の訪問ですね!」っていうのは
クッキー使ってたわけ? ほぅ・ほぅ・ほほぅー。
紅はかろうじてアレは使っていない。でも、マウス動かすとハートがついてくる、っていう
Javascript は超ー可愛いと思って使っていた。若気の至りだ。今は反省している。


では早速、ソースを貼ろう。
※タグの最初は全角にしてあります。


1 <?php
2 $times=$_COOKIE["count"];
3 if(!isset($times)){
4   $times=0;
5 }else{
6   $times++;
7 }
8 setcookie("count",$times,time()+600);
9 ?>
10 <html>
11 <head><title>cookie.php</title></head>
12 <body>
13 <?php
14 if($times==0){
15   print("1回目");
16 }elseif($times==1){
17   print("2回目");
18 }elseif($times==2){
19   print("3回目");
20 }else{
21   print("それ以降");
22 }
23 ?>
24 </body>
25 </html>



if はよく出てくるなぁー。
2行目の$_COOKIE は、スーパーグローバル変数らしい。
$_POST と一緒。
参考:3日目 今度はあなたに挨拶したい><


$_COOKIE
setcookie命令で指定したクッキー名を指定します。



$times に、あとで出てくる setcookie で保存した値を代入する、ということか。



3行目。
if(!isset とびっくりしているのはなぜだ。こっちがびっくりする。
isset は関数ぽい。


isset
引数に指定した変数が定義されているかどうか調べる関数です。

参考:PHP関数講座:isset


つまり、$times が定義されているかどうかを調べてるってこと。
OK、それはいい。そこまではいいんだけど、 ←コレが気になる。
なにか注意を促されている気がする。スルーしたいがきっとダメだろう。






NICE GEEK!!!!!!!!!
先日ナイスギークって「nice boat!」と関係あるのかな?って言及されたけど、
nice boat とは関係ない。
でもこのブログが最終回を迎えるときは紅の画像を流しておくので、
そのときは Nice Geek って書き込んでくださいね!



で、これを踏まえてもう1度3行目を見てみよう。
$times が定義されてたら 以下を処理しない。と言ってる。
てことは、定義されてなかったら 以下を処理する、ってこと?
たぶんそうだろう。そうじゃなきゃつじつまが合わなくて困るし。そういうことで進める。
処理する内容の詳細は以下から。(GIGAZINE風)


$times=0 は、0を代入。
そうじゃなかったら $times++ するんだって。
この場合の ++ は、イイ!の意味ではなく代入演算子と言うらしい。
参考:”++” は ”イイ!” のサイン


++ 加算代入
変数 $x の値に1を加算して代入する

参考:演算子/PHP入門


おぉ!いまなんかキタ。
このからくりが分かった気がする。
初めてページを訪れた人は $times が定義されてないから0を代入。
2回目に訪れたときは0が入ってるから、それに ++ して1にする。
3回目に訪れたときは1が入ってるから、それに ++ して2にする・・・
という処理が、アクセスするたびに行われてくんじゃないの?もしかして!!!
やーい!わかったぞ!!「よくぞ見破ったな!」 という高笑いが聞こえてきそうだー!
ごめん嘘。全くそんな気はしない。ちょっと盛り上げたかっただけなの。



8行目の setcookie という関数。

setcookie( )
任意のクッキーをクライアントの Webブラウザに送信します。

書式
setcookie (クッキー名, クッキー値, 有効期限, 有効パス,
有効ドメイン, trueまたは false);

参考:PHP関数リファレンス


参考書によると、必須項目は一番最初のクッキー名だけらしい。あとは省略可。
今回は、クッキー名・クッキー値・有効期限の3つを指定してる、んだと思う。
クッキー名はcount、クッキー値は$times
そして time()+600 は・・・


time( )
現在の時刻を、UNIX時間で返します。
UNIX時間は、1970年1月1日0時からの経過秒数とされ、
現在の時刻とは、20時間の差異があります。
UNIX時間を現在時間に換算するためには、72000秒を追加することで可能になります。

参考:PHP関数リファレンス


なんだろ、72000秒足してないけどいいのかな?
72000秒をスルーして考えると、現在の時刻プラス600秒が有効期限ってことなのかな。
そうだったらいいな。



とりあえずPHPはココでいったん終了。
この次からhtmlに入る。



14行目。
もし $times が超イコールで0だったら、1回目と言えと。
以下、$times が1なら2回目、2なら3回目と続く。


20行目。
$times が0でも1でも2でもない場合、つまり訪問回数が3回目以降のときは
それ以降と言え、ってこと。



オーケー。if は問題ない。
それじゃ、サンプル。
サンプル:cookie01.php



こういうの作ると使いたくなってしまうので危ない。
そこは初心に返る必要はないはずだ。




追伸

Twitterでアドバイスくださった方、ありがとうございました!!
名前書いてもいいかなぁ。名前だけならきっとセフセフと思う。

@signdigit @tetsunosuke @whitebell @Malan @yukkie_m @hmori @tsupo
@dev0000 @djfjmt @maname &いつもコメントくださるナイスギークな@てさん♪

お礼に紅からあなたにクッキーを渡します。


  


有効期限はどうだろう、4〜5日くらいは平気らしいです。
とマジレス。