MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
PHPの基礎 - クッキーのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
PHPの基礎 - クッキー
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == PHPにおいて、クッキーを利用する方法を記載する。<br> <br><br> == クッキーの送信 == クッキーは、クライアントにデータを保存するためのものである。<br> <br> 例えば、Webサイトを閲覧したクライアントに対してクッキーを送信して保存することにより、<br> 次に、同じWebサイトにアクセスする時、クッキーの有無を確認することで初めての訪問者なのかどうかを確認することができる。<br> <br> 以下の例では、Webサイトにアクセスする時、クライアントに対してクッキーを送信して保存している。<br> これは、<code>setcookie</code>関数を使用する。<br> bool setcookie(string name [, string value [, int expire [, string path [, string domain [, int secure]]]]]) setcookie関数は、その他のヘッダ情報と共に送信するクッキーを定義する。 他のヘッダ情報と同様に、クッキーは、スクリプトによる他のあらゆる出力よりも前に送信される必要がある。 もし、setcookie関数を呼ぶ前に何らかの出力がある場合は、setcookie関数は失敗してfalseを返す。 setcookie関数が正常に実行される場合、trueを返す。 この関数はユーザーがクッキーを受け入れたかどうかを示すことはしない。 パラメータ: name クッキーの名前 value クッキーの値 expire クッキーの有効期限 path サーバー上での、クッキーを有効としたいパス domain クッキーが有効なドメイン secure 1をセットすると セキュアなHTTPS接続の場合にのみクッキーが送信されるようになる。標準は0である。 戻り値: 正常に実行されるとtrue <br> 基本となるのは、クッキーの名前と値である。<br> 例えば、visitedという名前のクッキーを作成して、値に訪問回数である1を書き込む場合は、以下のように記述する。<br> <syntaxhighlight lang="php"> <?php $flag = setcookie("visited", 1); ?> <?php if($flag) { print('<p>クッキーを書き込みました</p>'); } else { print('<p>クッキーの書き込みに失敗しました</p>'); } ?> </syntaxhighlight> <br><br> == クッキーの読み込み == クライアントに保存したクッキーを読み取る手順を記載する。<br> <br> サーバによりクッキーが保存される時、次に、同一のサーバに対してアクセスすると、保存したクッキーを環境変数としてサーバへ送信する。<br> サーバでは、クライアントからWebページの要求等がある時、クッキーが合わせて送信されているかを確認する。<br> <br> クライアントからクッキーが送信されているかを確認するには、定義済みの連想配列<code>$_COOKIE</code>の内容を見ることで確認できる。<br> <code>$_COOKIE</code>は、サーバに送信された全てのクッキーが格納された配列である。<br> <br> 特定のクッキーの値を確認するには、以下のように記述する。<br> <syntaxhighlight lang="php"> $val = $_COOKIE["クッキーの名前"] </syntaxhighlight> <br> 例えば、前のセクションで使用したvisitedという名前のクッキーの値を取り出す場合は、以下のように記述する。<br> <syntaxhighlight lang="php"> $val = $_COOKIE["visited"] </syntaxhighlight> <br> 以下の例では、クッキーの値を確認して、クッキーが送信されていなければ初期値をクッキーに保存している。<br> また、クッキーが保存されている場合は、値を取り出して1追加する。<br> <syntaxhighlight lang="php"> <?php if(isset($_COOKIE["visited"])) { $count = $_COOKIE["visited"] + 1; } else { $count = 1; } $flag = setcookie("visited", $count); ?> <?php print('<p>訪問回数は'.$count.'回目です</p>'); ?> </syntaxhighlight> <br><br> == クッキーの有効期限の設定 == クッキーの有効期限を指定しない場合、クライアントのWebブラウザが終了すると削除される。<br> Webブラウザが終了してもクッキーを一定期間残す場合は、明示的にクッキーの有効期限を設定する。<br> <br> クッキーの有効期限は、<code>setcookie</code>関数の3番目の引数で指定する。<br> <br> 指定する値は、UNIX標準時1970年1月1日からの秒数で指定することになっているため、<br> まず、現在時刻のUNIX標準時からの経過秒数を取得して、クッキーの有効期限を秒に換算した値を加算して設定する。<br> 現在時刻のUNIX標準時からの経過秒数は、<code>time</code>関数で取得できる。<br> (<code>time</code>関数の詳細については、[[PHPの基礎 - 日時]]を参照すること)<br> <br> 以下の例では、クッキーの有効期限を現在から3日間にしている。<br> <syntaxhighlight lang="php"> time() + 259200 // 259200 = 60(秒) * 60(分) * 24(時間) * 3(日) </syntaxhighlight> <br> 以下の例では、有効期限を3分間にしている。<br> <syntaxhighlight lang="php"> <?php if(isset($_COOKIE["visited"])) { $count = $_COOKIE["visited"] + 1; } else { $count = 1; } $flag = setcookie("visited", $count, time() + 180); ?> <?php print('<p>訪問回数は'.$count.'回目です</p>'); ?> </syntaxhighlight> <br><br> == クッキーの削除 == クッキーを削除するには、有効期限を昔の時間に設定することで削除できる。<br> 不要なクッキーはできる限り削除することが望ましい。<br> <br> 以下の例では、有効期限30分のクッキーに対して、30分前の時間に戻している。<br> <syntaxhighlight lang="php"> setcookie("<クッキー名>", "", time() - 1800); // より安全な方法 setcookie("<クッキー名>", // 削除するクッキーの名前 "", [ // クッキーの値を空にする 'expires' => time() - 3600, // 有効期限を30分前前 (1800秒前) に設定して無効化 'path' => '/', // クッキーが有効なパス ('/'はサイト全体) 'domain' => 'example.com', // クッキーが有効なドメイン 'secure' => true, // HTTPS接続でのみ送信 (true) 'httponly' => true, // JavaScriptからアクセス不可 (true) 'samesite' => 'Strict' // クロスサイトリクエストを制限 (Strictは同一サイトのみ) ]); </syntaxhighlight> <br> 以下の例では、Webサイトに3回アクセスがある場合、クッキーを削除している。<br> <syntaxhighlight lang="php"> <?php if(isset($_COOKIE["visited"])) $count = $_COOKIE["visited"] + 1; else $count = 1; if($count > 3) { setcookie("visited", $count, time() - 1800); $count = 1; } else { setcookie("visited", $count); } ?> <?php print('<p>訪問回数は'.$count.'回目です</p>'); ?> </syntaxhighlight> <br><br> == 1つのクッキーに複数の値を保存する == 1つのサーバからクライアントに送信できるクッキーは1つだけではない。<br> <br> 例えば、以下のように、複数のクッキーを送信することができる。<br> <syntaxhighlight lang="php"> setcookie("user", "yamada"); setcookie("pass", "pass"); </syntaxhighlight> <br> ただし、クライアントは1つのサーバから受信できるクッキーは最大20個、全体でも合計300個までのクッキーしか保存できない。<br> そのため、多くのクッキーを利用する場合は、工夫が必要となる。<br> <br> 20個以上のクッキーを送信する場合は、クッキー名を配列のように扱うことにより、配列の各要素に値を代入する。<br> 配列にすることにより、クッキー名としてはbuyのみ使用されるため、1つのクッキーのみ消費する。<br> <syntaxhighlight lang="php"> setcookie("buy[1]", "Televison"); setcookie("buy[2]", "Video"); setcookie("buy[3]", "Audio"); </syntaxhighlight> <br> 配列からクッキーを取得するには、以下のように記述する。<br> <syntaxhighlight lang="php"> $val = $_COOKIE['cookie']; print($val[1]); print($val[2]); print($val[3]); <?php if (isset($_COOKIE["buy"])) { $val = $_COOKIE["buy"]; print('<p>'); print('購入したものは下記の通りです<br>'); print($val[1].'<br>'); print($val[2].'<br>'); print($val[3]); print('</p>'); } else { print('<p>値をセットしました</p>'); } ?> </syntaxhighlight> <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:Web]]
PHPの基礎 - クッキー
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse