【php】SESSION(セッション)とcookie(クッキー)の違いは?メリットと仕組みを徹底解説!
この記事からわかること
- SESSION(セッション)とはどのようなものか
- SESSION(セッション)とcookie(クッキー)の違い
- 仕組みとメリット
- $_SESSIONの使い方
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
SESSION(セッション)とは?
セッションとはphpで使用できる「サーバー側に情報を保存できる」機能です。
情報を保持できることによりページを跨いだ時にも情報を共有することができます。
例えば入力ファイルで入力された情報をPOSTで受け取り、SESSIONに格納することで入力ファイルとは関係ない出力ファイルで情報を受け取り出力するなんてことができるようになります。
セッションの仕組みとしてはまずサーバー側に情報を保存します。
その後サーバーはユーザーごとに一意のIDを発行し、そのIDでユーザを識別し、そのIDに紐付けた情報のみを返します。
なのでブラウザを閉じてしまうとブラウザとIDの紐付けがなくなり新しいIDが発行されるため、情報を維持できなくなります。
SESSION(セッション)とcookie(クッキー)の違い
似たような特徴を持った機能にcookie(クッキー)があります。これはphpを学習していなくても聞いたことがある人が多いのではないでしょうか?
cookieもデータを保持し別のページを跨いで情報を取得することができます。
では両者の違いをまとめてみてみましょう。
●両者の違い
項目 | セッション | クッキー |
---|---|---|
情報の保管場所 | サーバー | ユーザー(ブラウザ) |
ネットへの情報の流れ方 | 情報を引き出すキー値のみ | 情報そのまま |
ブラウザを閉じて再度開いた時 | 情報は残らない | 情報は残る |
このようにセッションとクッキーはできることは同じでも特徴に少し違いがあります。
そもそもcookieは受け入れないように設定することもできるのでクッキーを使える前提でプログラムに組み込むには少し問題があります。
しかも情報自体がネット間を流れるのでセキュリティ的にもあまりよろしくありません。
セッションにはセキュリティ面からでもメリットしかないように思えますがブラウザを閉じた時には情報は保持されないので注意が必要です。
しかも取り扱うまでに少しやるべきことがあるのでそこも含めて使い方を解説していきます。
セッションを実際に使ってみよう
phpでセッションを使うにはまず環境を整えなければいけません。
MAMPやXAMPPなどのローカル環境を使っても良いですし、実際にサーバーにアップしながら挙動を確かめても良いです!(ファイルをFTPで送信しないといけないのでめんどくさいですが...)
環境構築が整った状況として解説していきます。
セッションを使う際の流れ
- セッションを利用できるようにする
- セッションを利用する
- セッションを破棄する
セッションを扱う際には必ずこのルーティーンを行うようにしましょう。
セッションを開始するのは「session_start関数」の役割です。明示的に開始する宣言をしておかないと正し動作をしないことがあるので注意しましょう。
また「php.ini」の設定をいじることでわざわざ関数を使わなくてもスタートさせることができます。
session.auto_startに「1」を設定すれば何も気にせずにセッションを取り扱うことができます。
適当なファイルを用意しコードを書き込んでいきます。
<?php
session_start();
?>
スーパーグローバル変数【$_SESSION】の使い方
セッションを取り扱う準備ができたら実際に使ってみましょう。
【$_SESSION】は普通の連想配列のように操作することができます。
例えばこれは入力された値を$_POSTで受け取り$_SESSIONに格納後表示しています。
<?php
session_start();
$_SESSION['test'] = $_POST['test'];
echo $_SESSION['test'];
$box = $_SESSION['test'];
?>
<!DOCTYPE html>
<html lang ="ja">
<head>
<meta charset="utf-8">
<title>SUMPLE</title>
</head>
<body>
<form method="post" action="test.php">
<input name="test" value="">
<input type="submit">
</form>
</body>
</html>
わざわざセッションを使う必要もありませんが変数のように値を格納したり取得することができることが大切になります。
セッションを使ったページ(ファイル)間の情報の渡し方
セッションを使ってページ(ファイル)間で情報を渡す方法は実は特にありません。
ただ最初に作ったページ(ファイル)から移動するだけで情報は渡されています。情報を譲渡しているというよりページとは無関係の保管場所に保管し、それをどのページ(ブラウザを閉じなければ)からでも取りに行けるという感じでしょうか。
変移先のファイルとして「test2.php」を作るとします。
「test.php」からHTMLのa要素やphpのheader関数などで画面を変えてあげましょう。
session_start();
$_SESSION['test'] = $_POST['test'];
echo $_SESSION['test'];
$box = $_SESSION['test'];
// 画面を強制的に変化させても
if(isset($_POST['test'])){
header('Location:http://localhost/tech/test2.php');
}
// 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
//画面をユーザーのタイミングで変化させても
<a href="test2.php">jump</a>
<?php
session_start();
echo "これは別ページです";
echo $_SESSION['test']; // こちらは表示される
echo $box; //もちろんこちらは何も表示されない
?>
画面が変移しても値を保持できるのはプログラムを作るのにはとても重宝します。そんなに使い方は難しくないので色々試して覚えていきましょう!
セッションの破棄の仕方
セッションを使用し終えたタイミングでセッションを破棄するのが正しい流れになります。破棄しなくてもエラーが起きるわけではありませんが不必要になった情報は破棄するに限ります。
それでは具体的なコードをみていきましょう!
// 終了処理開始 セッションの破棄
$_SESSION= []; // セッション連想配列を空にする
if(isset($_COOKIE[session_name()])){
$params=session_get_cookie_params();
setcookie(session_name(),'',time() - 42000,$params["path"],$params["domain"],$params["secure"],$params['httponly']);
}
session_destroy();
// セッションの破棄
セッションの破棄はやることが多いですがいつも定型的なコードなのでコピペして使用しましょう。
セッション情報を受け取りためのIDキーの受け渡しにはクッキーが使われています。なのでクッキーも初期化しておきます。
- $_COOKIE[session_name()] → 現在のセッション名を取得
- session_get_cookie_params() → クッキーのパラメータを全て取得
- setcookie(session_name(),'',time() - 42000,
$params["path"],$params["domain"],
$params["secure"],$params['httponly'])
クッキーのパラメータを全て初期化
setcookie関数で「time() - 42000」とマイナスの値にすることでクッキーは破棄することができます。この部分はクッキーの有効期限を指定している部分なのでマイナス値にすることで即座に破棄することができます。
まとめ
セッションとは
- SESSION(セッション)とはサーバー側に情報を格納する機能
- SESSION(セッション)とcookie(クッキー)は保管場所やネットを流れる情報が違う
- スーパーグローバル変数$_SESSIONを使うことで連想配列のように参照できる
- セッションを使うにはスタートと破棄を必ず行う