【独学】はじめてのWebプログラミング – 5.7 PHPの基礎⑦

Cookie

Cookieとは、ブラウザに保存されるデータのことです。
例えば、とあるサイトにログインした後にデータをどこかに保存しておかないと、サーバーにアクセスするたびにログインし直さなくてはいけなくなります。このようなときに役に立つのがCookieです。Cookieのデータをサーバーに渡してあげることで「このユーザーはログイン済みなんだな」「このユーザーはxxxさんか」という情報がサーバー側で分かるのです。
ブラウザ側のソースコードでCookieを意識する必要はありません。ブラウザが勝手にCookieをサーバーに渡してくれます。

Cookieの説明

Cookieはログイン(認証)情報だけでなく、ブラウザとサーバー間で保管しておくべきデータを自由に保管することができます。

ブラウザで実際のCookieを見てみましょう。
任意のWebサイト上で右クリックし、検証を選択して下さい。

Cookieの説明

上のメニューから「Application」タブを選択し、左のメニューから「Cookie」を選択、その中から任意のWebサイト(e.g. https://www.yahoo.co.jp)を選択します。すると、ブラウザが保管しているCookieの一覧が見れます。
Cookieは「Name」と「Value」でセットのデータです。例えば、Nameは「user」、そのValueは「sato」といった組み合わせです。
「Domain」には、上図では例えばgoogle.comがありますが、これはGoogleのサーバーが発行したCookieである、ということを示しています。

Cookieの発行

サーバーでCookieを発行してみます。
例えば、以下のように書きます。

htdocs/PHP/test.php

<?php

setcookie('user','sato');

?>
ブラウザ

Cookieの発行(設定)には、PHPの関数であるsetcookie関数を使います。
一つ目の引数には「Name」を、二つ目の引数には「Value」を指定します(ここでは、Nameには「user」、Valueには「sato」を指定しました)。

ブラウザで「http://localhost/PHP/test.php」にアクセスします。
このタイミングでtest.phpが実行され、すなわちsetcookie関数が実行され、ブラウザにCookieが渡されます。そして、ブラウザではそのCookieを保管します。

右クリックして検証を選び、ブラウザのCookieを見て下さい。
サーバー側で発行した、Nameが「user」、Valueが「sato」というCookieが存在します。サーバーとはここでは「localhost」なので、Domainは「localhost」と見えています。

次に、ブラウザで異なるWebページ「http://localhost/PHP/index.html」に移動して下さい。

先ほどのCookieは保管されたままです。
このように、一度保管されたCookieは、異なるWebページに移動してもブラウザに保管されたままになります。

Cookieの更新

いま、ブラウザが以下のCookieを保管しているとします。
(Name「user」、Value「sato」を保持しています)

ここで、test.phpを以下のように書き換えます。

htdocs/PHP/test.php

<?php

setcookie('user','ito');

?>

ブラウザで再度、「http://localhost/PHP/test.php」にアクセスして下さい。

ブラウザ

CookieのValueが「ito」に変わりました。
このように、PHPのsetcookie関数でCookieの値(Value)を変更することができます。

セッション

Cookieはクライアント側のサーバーに認証情報などを保管するものでした。
一方でセッションとは、サーバー側に保管するものになります。

セッションの説明

ブラウザからサーバーにログインすると、サーバー側では認証処理を行い、問題なければセッション情報を作成して、サーバー側に保管します。同時に、セッションに紐づく番号を発行し、ブラウザに返します。以降、ブラウザはその番号を付けてサーバーに指示を送ります。サーバーは番号に紐づくセッション情報を確認し、そのクライアントが認証済みであることを把握します。
ブラウザ側のソースコードでセッションの番号を意識する必要はありません。ブラウザが勝手にサーバーに伝えてくれます。

セッションの発行

サーバーでセッションを発行してみます。
例えば、以下のように書きます。

htdocs/PHP/test.php

<?php

session_start();  // session_startはPHPの関数

echo session_id();  // session_idはPHPの関数

?>
ブラウザ

PHPの関数である「session_start」を実行することで、セッションを発行(開始)することができます。同じくPHPの関数である「session_id」を実行することで、発行されたセッションID(番号)を確認することができます。
このセッションIDがブラウザに送られ、以降のブラウザから命令する際は、このIDもあわせてサーバーに送られることになります。

セッションの更新

サーバーでセッションを更新してみます。
例えば、以下のように書きます。

htdocs/PHP/test.php

<?php

session_start();

echo '前回のセッションID:'.session_id();
echo '<br>';

session_regenerate_id();  // session_regenerate_idはPHPの関数

echo '新しいセッションID:'.session_id();

?>
ブラウザ

PHPの関数である「session_regenerate_id」を使うことで、セッション(ID)を更新することができます。

リダイレクト

リダイレクト(redirect)とは転送という意味であり、「異なるWebページに転送」することを指します。
例えば、とあるWebページにアクセスした際、そのユーザーが認証できていなければ、ログインページに転送するようなケースです。

PHPで転送を行う場合、例えば以下のように書きます。

htdocs/PHP/test.php

<?php

header('Location: https://www.yahoo.co.jp/');  // headerはPHPの関数
exit;

?>
ブラウザ

PHPの関数である「header」を使い、引数には「Location: リダイレクトしたいURL」を指定します(ここでは「https://www.yahoo.co.jp」を指定)。
すると、「http://localhost/PHP/test.php」にアクセスすると、「https://www.yahoo.co.jp」にリダイレクトされます。

header関数の後には、必ず「exit」を付けて下さい。文字通り「ここで終了」という意味です。exitを付けないと、例えば以下のようになります。

htdocs/PHP/test.php

<?php

header('Location: https://www.yahoo.co.jp/');

// exitは書かない

header('Location: https://www.google.com/');

?>
ブラウザ

exitを書かないと、このように後続の処理が実行されてしまい、意図しない動作になってしまうのです。

本節の説明は以上になります。

トップページ <<前のカリキュラムへ戻る 次のカリキュラムへ進む>>

タイトルとURLをコピーしました