Cookie
Cookieとは、ブラウザに保存されるデータのことです。
例えば、とあるサイトにログインした後にデータをどこかに保存しておかないと、サーバーにアクセスするたびにログインし直さなくてはいけなくなります。このようなときに役に立つのがCookieです。Cookieのデータをサーバーに渡してあげることで「このユーザーはログイン済みなんだな」「このユーザーはxxxさんか」という情報がサーバー側で分かるのです。
ブラウザ側のソースコードでCookieを意識する必要はありません。ブラウザが勝手にCookieをサーバーに渡してくれます。
Cookieはログイン(認証)情報だけでなく、ブラウザとサーバー間で保管しておくべきデータを自由に保管することができます。
ブラウザで実際のCookieを見てみましょう。
任意のWebサイト上で右クリックし、検証を選択して下さい。
上のメニューから「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を書かないと、このように後続の処理が実行されてしまい、意図しない動作になってしまうのです。
本節の説明は以上になります。