| PHPのちょっとしたTIPS |
| Last Modified : 2003/03/18 (Tue) |
| No.2 | クッキーの発行と取得 - setcookie() $HTTP_COOKIE_VARS | ||||||||||||||
|
setcookie()関数を使用することで容易にクッキーを発行することが出来ます。
<?php
setcookie("クッキー名", "クッキーの値", "有効期限", "パス", "ドメイン名", "セキュア属性");
?>
という感じです。それぞれの引数の意味は以下のようになります。
通常、パス、ドメイン名、セキュア属性は省略しても差し支えないので、 以下のような使い方が一般的になると思います。
<?php
//有効期限を指定して発行する場合
setcookie("クッキー名", "クッキーの値", "有効期限");
//セッション間でのみ(ブラウザを閉じるまで)有効なクッキーを発行する場合
setcookie("クッキー名", "クッキーの値");
?>
発行したクッキーは次回の訪問から有効になります。(クライアントからのクッキーはブラウザからのリクエストヘッダ(Cookieヘッダ)に含まれるので当然ですね) クライアントが送信して来たクッキーは、 <?php echo $HTTP_COOKIE_VARS["クッキー名"]; ?>という感じで連想配列$HTTP_COOKIE_VARSで取得できます。 またphp.iniでregister_globalsが有効な場合は $クッキー名 でも取得できます。 setcookie()関数を使用する上でのいくつかの注意点を。
以上を踏まえて、訪問回数を表示する例を。
<?php
/* クッキー名(任意) */
$cookie = "COOKIE_VISIT";
/* クライアントからクッキーが送信されているか判断 */
if (isset($HTTP_COOKIE_VARS[$cookie])) {
$value = (int)$HTTP_COOKIE_VARS[$cookie];
} else {
$value = 0;
}
/* 訪問回数のインクリメント */
$value++;
/* 有効期限(1年) */
$expire = time() + 365*24*3600;
/* クッキー発行 */
setcookie($cookie, $value, $expire);
?>
<HTML>
<BODY>
今回で<?php echo $value ?>回目の訪問ですね?
</BODY>
</HTML>
このスクリプトにアクセスすると例えば以下のようなレスポンスが帰ってくるはずです。(ブラウザでは通常HTTPヘッダは見えませんがtelnetとか使ってアクセスすると確認できます) $ telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. GET /cookie.php HTTP/1.0 HTTP/1.1 200 OK Server: Microsoft-IIS/4.0 Date: Mon, 18 Jun 2001 02:14:40 GMT Content-type: text/html X-Powered-By: PHP/4.0.5 Set-Cookie: COOKIE_VISIT=1; expires=Tue, 18-Jun-02 02:14:40 GMT <HTML> <BODY> 今回で1回目の訪問ですね? </BODY> </HTML> Connection closed by foreign host.setcookie()関数によってHTTPレスポンスヘッダにSet-Cookieヘッダが追加されています。 ちなみにSet-Cookieヘッダの基本フォーマットは、 Set-Cookie: NAME=VALUE; expires=DATE; path=PATH; domain=DOMAIN_NAME; secureです。 このヘッダを受け取ったブラウザは次回そのURIにアクセスした時にリクエストヘッダにCookieヘッダを含めます。 例えば、 $ telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. GET /cookie.php HTTP/1.0 Cookie: COOKIE_VISIT=1 HTTP/1.1 200 OK Server: Microsoft-IIS/4.0 Date: Mon, 18 Jun 2001 02:56:38 GMT Content-type: text/html X-Powered-By: PHP/4.0.5 Set-Cookie: COOKIE_VISIT=2; expires=Tue, 18-Jun-02 02:56:38 GMT <HTML> <BODY> 今回で2回目の訪問ですね? </BODY> </HTML> Connection closed by foreign host.という感じで、 Cookie: クッキー名=クッキーの値というリクエストヘッダを送信します。 複数のクッキーがある場合は、セミコロン区切りで書きます。 Cookie: 名前1=値1; 名前2=値2; 名前3=値3; ...というわけでHTTPヘッダのレベルではこんな感じになってます。 |
|||||||||||||||