クッキーの応用03
☆★データーでの確認★☆
setcookie - クッキーを送信する
setcookie - クッキーを送信する
- setcookie()は、その他のヘッダ情報とともに、送信するクッキーを定義する。ほかのヘッダ情報と同様に、クッキーは、スクリプトによる他のあらゆる出力よりも前に送信される必要がある(これはHTTPプロトコルの制約)。<HTML>や<head>タグはもちろん空白も含め、あらゆる出力よりも前にこの関数をコールしなければならない。
- 一度クッキーが送信されると、次のページのロードからは$_COOKIEや$HTTP_COOKIE_VARS配列によってクッキーにアクセスできる。$_COOKIEのようなスーパーグローバルはPHP4.1.0以降で有効になる。
- クッキーの値は$_TEQUEST配列からもアクセスできる。
パラメータ
- name 以外のすべての引数はオプション。
- すべての引数に関して引数の指定をスキップするために空文字(””)とすることが可能。expire および secure は数値なので、空文字列でスキップすることはできない。代わりにゼロ(0)をしようする。
- name
- クッキーの名前。
- value
- クッキーの値。この値はクライアントのPCに保存されるので、重要な情報は格納しない。name が 'cookiename' だとすると、その値は$_COOKIE['cookiename']で取得できる。
- expire
- クッキーの有効期限。Unixのタイムスタンプのため Epoch(1970.01.01)からの経過秒数になる。
time() または mktime() 関数により返された現在の UNIX 標準時に、期限としたい必要な秒数を加算したものを利用できる。0 を設定または省略した場合、クッキーのセッションの最後(ブラウザーを閉じるとき)が有効期限になる。 - path
- サーバー上でのクッキーを有効にしたパス '/' をセットすると、クッキーは domain 配下のすべてで有効となる。
'/foo/' をセットすると、クッキーは '/foo/' ディレクトリとそのサブディレクトリ配下 (例:/foo/bar)で有効になる。
デフォルト値は、クッキーがセットされたときのカレントディレクトリ。 - domain
- クッキーが有効などメイン。exapmle.com のすべてのサブドメインで有効にするには '.example.com'をセットする。.は必須ではないが、多くのブラウザにおいて互換性がある。
www.example.com にセットすると、クッキーはwwwサブドメインにおいてのみ有効となる。 - secure
- クライアントからセキュアな HTTPS 接続の場合のみにクッキーが送信されるようにする。TRUE を設定すると、セキュアな接続が存在する場合にのみクッキーを設定する。デフォルトは FALSE 。サーバー側では、このようにセキュアな接続の場合のみクッキーを送信する処理はプログラマの責任で行う。
- httponly
- TRUE を設定すると、HTTP を通してクッキーのみにアクセスできるようになる。つまり、JavaScript のようなスクリプト言語からはアクセスできなくなる。
この設定をすると、XSS攻撃によってIDを盗まれる危険性を減らせる。
返り値
- もしもこの関数をコールする前になんらかの出力がある場合には、setcookie() は失敗し FALSE を返す。正常に実行されると、TURE を返す。
【 書式 】
<?php $value = 'something from somewhere'; setcookie("TestCookie", $value); setcookie("TestCookie", $value, time()+3600); /*有効時間は1時間*/ setcookie("TestCookie", $value, time()+3600, "/〜rasmus/", "example", 1); ?> <?php // ここのクッキーを表示する echo $_COOKIE["TestCookie"]; echo $HTTP_COOKIE_VARS["TestCookie"]; // デバッグ/テスト用には、すべてのクッキーを見る方法がある。 print_r($_COOKIE); ?> <?php // 有効期限を1時間前に設定する setcookie ("TestCookie", "", time() - 3600); setcookie ("TestCookie", "", time() - 3600, "/〜rasmus/", ".example.com", 1); ?>
ソースコード
ソースコード【 HTML 】
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="description" content=""> <meta name="keywords" content=""> <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"> <title>webサイト開発 | PHPサンプルサイト</title> <link href="../css/reset.css" rel="stylesheet" type="text/css" media="screen"> <!-- CSS for slidesjs.com example --> <link rel="stylesheet" href="../css/example.css"> <link rel="stylesheet" href="../css/font-awesome.min.css"> <!-- End CSS for slidesjs.com example --> <link rel="stylesheet" href="../css/embet.css"> <link href="../css/common.css" rel="stylesheet" type="text/css" media="screen"> <link href="../css/page.css" rel="stylesheet" type="text/css" media="screen"> <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script> <script type="text/javascript"> jQuery(document).ready(function($) { //****************************************** //クリックによる開閉 //****************************************** //基本的に、ページ内のどこをクリックしても全てのサブメニューを閉じるようにしておく。 $(document).click(function() { $('#main_menu > li > ul').slideUp() }); $('#main_menu > li').click(function(ev){ var sub = $(this).children('ul'); if ($(sub).is(':hidden')) { //今回は、これからサブメニューを開きたい項目をクリックしているので、 //上記の、全てのサブメニューを閉じるイベントを発火させてはならない。 //よって、イベントのバブリングを中止する。 ev.stopPropagation(); //他に開いているサブメニューを閉じる。 //開いたままでもよければ、下の1行は必要ない。 $('#main_menu > li > ul:visible').slideUp(); $(sub).slideDown(); } }); //クリックによる開閉の場合、親メニューの"a"要素の機能は必要ないので無効にする。 $('#main_menu > li > a').click(function(ev) { ev.preventDefault() }); }); </script> <script type="text/javascript"> jQuery(document).ready(function($) { //****************************************** //クリックによる開閉 //****************************************** //基本的に、ページ内のどこをクリックしても全てのサブメニューを閉じるようにしておく。 $(document).click(function() { $('#main_menu > li > ul').slideUp() }); $('#main_menu > li').click(function(ev){ var sub = $(this).children('ul'); if ($(sub).is(':hidden')) { //今回は、これからサブメニューを開きたい項目をクリックしているので、 //上記の、全てのサブメニューを閉じるイベントを発火させてはならない。 //よって、イベントのバブリングを中止する。 ev.stopPropagation(); //他に開いているサブメニューを閉じる。 //開いたままでもよければ、下の1行は必要ない。 $('#main_menu > li > ul:visible').slideUp(); $(sub).slideDown(); } }); //クリックによる開閉の場合、親メニューの"a"要素の機能は必要ないので無効にする。 $('#main_menu > li > a').click(function(ev) { ev.preventDefault() }); }); </script> <script type="text/javascript"> jQuery(document).ready(function($) { //****************************************** //クリックによる開閉 //****************************************** //基本的に、ページ内のどこをクリックしても全てのサブメニューを閉じるようにしておく。 $(document).click(function() { $('#list_menu > li > ul').slideUp() }); $('#list_menu > li').click(function(ev){ var sub = $(this).children('ul'); if ($(sub).is(':hidden')) { //今回は、これからサブメニューを開きたい項目をクリックしているので、 //上記の、全てのサブメニューを閉じるイベントを発火させてはならない。 //よって、イベントのバブリングを中止する。 ev.stopPropagation(); //他に開いているサブメニューを閉じる。 //開いたままでもよければ、下の1行は必要ない。 $('#list_menu > li > ul:visible').slideUp(); $(sub).slideDown(); } }); //クリックによる開閉の場合、親メニューの"a"要素の機能は必要ないので無効にする。 $('#main_menu > li > a').click(function(ev) { ev.preventDefault() }); }); </script> <style type="text/css"> #main_menu > li > ul { display:none; padding: 10px 10px 5px; background: rgba(169, 169, 170, 1.0); cursor: pointer!important; } </style> </head> <body> <!--▽#container--> <div id="container"> <header class="clearfix"> <h1><a href="../index.html"><img src="../images/logo.png" width="75" alt=""></a><span>webサイト開発 | PHPサンプルサイト</span></h1> <!--▽#menu--> <ul id="main_menu"> <li><a href=""><img src="../images/menu.png" width="38px" alt=""></a> <ul class="menu_home"> <li><span class="menu_title">HOME</span> <li><a href="#top">TOP</a></li> </li></ul> <ul class="menu_link"> <li><span class="menu_title">LINK</span> <li><a href="http://d.hatena.ne.jp/webry/">実践するWEBサイト制作 | webnote</a></li> <li><a href="http://webry.dousetsu.com/images_deta/">はてなデーターの保管庫 | webrynote</a></li> <li><a href="http://webrynote.jimdo.com/"></a>動画で確認するscript | FlashとJavaScrip</li> <li><a href="http://webry.dousetsu.com/"></a>実践でカフェオレを俺流においしく作るサイト | カフェ俺流に作る</li> </li></ul> <ul class="menu_sns"> <li><span class="menu_title">SNS</span> <li><a href="https://twitter.com/webrynote">Twitter</a></li> <li><a href="https://www.facebook.com/note.webry">Facebook.</a></li> <li><a href="http://webry.tumblr.com/">Tumblr</a></li> </li></ul> </li> </ul> </header> <!--▽.content--> <div class="content"> <!--▽.col1--> <section class="col1"> <h2>クッキーの応用</h2> </section><!--▲.col1--> <!--▽.content_inner--> <div class="content_inner"> <section class="col2"> <section id="post01" class="col2-1 post"> <a href="#post01"><h2><span class="ita">1-3 </span>setcookie</h2></a> <div class="post_inner"> <p class="p_point"><span class="point">point </span>setcookie - クッキーを送信する</p> <ul class="list01"> <li>setcookie()は、その他のヘッダ情報とともに、送信するクッキーを定義する。ほかのヘッダ情報と同様に、クッキーは、スクリプトによる他のあらゆる出力よりも前に送信される必要がある(これはHTTPプロトコルの制約)。<HTML>や<head>タグはもちろん空白も含め、あらゆる出力よりも前にこの関数をコールしなければならない。</li> <li>一度クッキーが送信されると、次のページのロードからは$_COOKIEや$HTTP_COOKIE_VARS配列によってクッキーにアクセスできる。$_COOKIEのようなスーパーグローバルはPHP4.1.0以降で有効になる。</li> <li>クッキーの値は$_TEQUEST配列からもアクセスできる。</li> </ul> <h3>パラメータ</h3> <ul class="list01"> <li>name 以外のすべての引数はオプション。</li> <li>すべての引数に関して引数の指定をスキップするために空文字(””)とすることが可能。expire および secure は数値なので、空文字列でスキップすることはできない。代わりにゼロ(0)をしようする。</li> <li> <dl> <dt class="b">name</dt><dd>クッキーの名前。</dd> <dt class="b">value</dt><dd>クッキーの値。この値はクライアントのPCに保存されるので、重要な情報は格納しない。name が 'cookiename' だとすると、その値は$_COOKIE['cookiename']で取得できる。</dd> <dt class="b">expire</dt><dd>クッキーの有効期限。Unixのタイムスタンプのため Epoch(1970.01.01)からの経過秒数になる。<br> time() または mktime() 関数により返された現在の UNIX 標準時に、期限としたい必要な秒数を加算したものを利用できる。0 を設定または省略した場合、クッキーのセッションの最後(ブラウザーを閉じるとき)が有効期限になる。</dd> <dt class="b">path</dt><dd>サーバー上でのクッキーを有効にしたパス '/' をセットすると、クッキーは domain 配下のすべてで有効となる。<br> '/foo/' をセットすると、クッキーは '/foo/' ディレクトリとそのサブディレクトリ配下 (例:/foo/bar)で有効になる。<br> デフォルト値は、クッキーがセットされたときのカレントディレクトリ。</dd> <dt class="b">domain</dt><dd>クッキーが有効などメイン。exapmle.com のすべてのサブドメインで有効にするには '.example.com'をセットする。.は必須ではないが、多くのブラウザにおいて互換性がある。<br> www.example.com にセットすると、クッキーはwwwサブドメインにおいてのみ有効となる。</dd> <dt class="b">secure</dt><dd>クライアントからセキュアな HTTPS 接続の場合のみにクッキーが送信されるようにする。TRUE を設定すると、セキュアな接続が存在する場合にのみクッキーを設定する。デフォルトは FALSE 。サーバー側では、このようにセキュアな接続の場合のみクッキーを送信する処理はプログラマの責任で行う。</dd> <dt class="b">httponly</dt><dd>TRUE を設定すると、HTTP を通してクッキーのみにアクセスできるようになる。つまり、JavaScript のようなスクリプト言語からはアクセスできなくなる。<br> この設定をすると、XSS攻撃によってIDを盗まれる危険性を減らせる。</dd> </dl> </li> </ul> <h4>返り値</h4> <ul class="list01"> <li>もしもこの関数をコールする前になんらかの出力がある場合には、setcookie() は失敗し FALSE を返す。正常に実行されると、TURE を返す。</li> </ul> </div> </section><!--▲.col2-1--> <section class="col-code"> <div id="post02" class="post"> <a href="#post02"><h2><span>PHPのコードを表示</span></h2></a> <div class="post_inner"> <div class="inner"> <pre> <code> <?php $value = 'something from somewhere'; setcookie("TestCookie", $value); setcookie("TestCookie", $value, time()+3600); /*有効時間は1時間*/ setcookie("TestCookie", $value, time()+3600, "/〜rasmus/", "example", 1); ?> <?php // ここのクッキーを表示する echo $_COOKIE["TestCookie"]; echo $HTTP_COOKIE_VARS["TestCookie"]; // デバッグ/テスト用には、すべてのクッキーを見る方法がある。 print_r($_COOKIE); ?> <?php // 有効期限を1時間前に設定する setcookie ("TestCookie", "", time() - 3600); setcookie ("TestCookie", "", time() - 3600, "/〜rasmus/", ".example.com", 1); ?> </code> </pre> </div> </div> </div> </section> <section class="col2"> <div id="post03" class="post"> <a href="#post03"><h2><span>PHPでの表示</span></h2></a> <div class="post_inner"> <div class="inner"> <div class="php wd_wrap"> <p>以下は、クッキーを送信する例</p> <h4>setcookie'() で送信の例</h4> <?php $value = 'something from somewhere'; setcookie("TestCookie", $value); setcookie("TestCookie", $value, time()+3600); /*有効時間は1時間*/ setcookie("TestCookie", $value, time()+3600, "/〜rasmus/", "example", 1); ?> <p class="maru">クッキーの value の部分は、クッキーの送信を行う際に自動的に URL エンコードされ、またっクッキーを受信した際は、自動的にデコードされてクッキー名と同じ名前の変数に格納されることに注意する。この挙動が気に入らない場合、もしPHP5をしようしているなら代わりに setrawcookie() を使う。スクリプト内部で TestCookie の内容を見たい場合は、以下のいずれかの例を使用する。</p> <?php // ここのクッキーを表示する echo $_COOKIE["TestCookie"]; echo $HTTP_COOKIE_VARS["TestCookie"]; // デバッグ/テスト用には、すべてのクッキーを見る方法がある。 print_r($_COOKIE); ?> <h4>setcookie() による削除の例</h4> <p class="maru">クッキーを削除する場合には、ブラウザの削除機構を起動するために必ず有効期限を過去に設定する必要がある。</p> <?php // 有効期限を1時間前に設定する setcookie ("TestCookie", "", time() - 3600); setcookie ("TestCookie", "", time() - 3600, "/〜rasmus/", ".example.com", 1); ?> </div> </div> </div> </div> </section> <!--<section class="col2"> <div id="post04" class="post"> <a href="#post04"><h2><span>FORMでの入力</span></h2></a> <div class="post_inner"> <div class="inner"> <div> </div> </div> </div> </div> </section>--> <p class="c_top"><a href="../index.html#13">▲ カテゴリートップへ戻る</a></p> <section class="bottom clearfix"> <a href="#"><p class="page_top">TOP</p></a> <div class="share_box"> <p><span>このサイトをシェアする</span> <a href="https://twitter.com/share" class="twitter-share-button" data-via="webrynote">Tweet</a> <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script><br> <div id="fb-root"></div> <script>(function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/ja_JP/all.js#xfbml=1"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));</script></p> </div> </section><!--▲.bottom--> </section><!--▲.content--> <footer> <ul> <li><a href="http://d.hatena.ne.jp/webry/">実践するWEBサイト制作 | webnote</a></li> <li><a href="http://webry.dousetsu.com/images_deta/">はてなデーターの保管庫 | webrynote</a></li> <li><a href="http://webrynote.jimdo.com/">動画で確認するscript | FlashとJavaScrip</a></li> <li><a href="http://webry.dousetsu.com/">実践でカフェオレを俺流においしく作るサイト | カフェ俺流に作る</a></li> <li><a href="https://twitter.com/webrynote">Twitter</a></li> <li><a href="https://www.facebook.com/note.webry">Facebook.</a></li> <li><a href="http://webry.tumblr.com/">Tumblr</a></li> </ul> <address>Copyright © 2014 webry - 『 webサイト開発 | PHPサンプルサイト 』 All Rights Reserved.</address> </footer> </div><!--▲.content_inner--> </div><!--▲#container--> </body> </html>
追加された外部ファイル
- page.css