セッション session
セッションについて学ぼう
今回はセッションについて学んでいきましょう。セッションは、ログインをする時、二重投稿を禁止する時に利用します。クッキーと似ていますが、セッションはサーバー側にだけ、特定の文字列が保存されます。
二重投稿を禁止する時に利用する ログインの時に利用 前回入力したユーザー名が分かる カートに入れた商品が分かる サーバー側にだけ保存される |
セッションを利用する
そもそもセッションとは?
セッションとはWebサイトにアクセスして行う一連の行動の事です。
Webサイトにアクセス、そのサイトから出て行く、戻るボタンを押す、ブラウザを閉じるまでが1セッションとなります。
ログインの場合、ログインをしてからログアウトをするまでを一つのセッションとします。
セッションを使う理由とは?
1.クッキーだとクッキー情報がクライアントの端末に保存されるので、書き換えやロギングツールでなりすましができてしまう。(危険)
2.クッキーはネットワーク上で受け渡しをするので、ロギングされる。
3.セッションは、手軽に、セキュアに情報を扱う事ができる。(安全)
セッションで同じ人だと確認ができる
http通信では状態を保存する方法がありません。
つまり、同じ人だと判別できません。すると、ログイン画面が利用できなくなってしまいます。
セッションを利用して、何回目のアクセスなのか?
誰がアクセスしているのか?
などを保存しておける仕組み。
これがあるので、アクセス解析、会員ページを利用できるようになります。
セッションは、PHPSSIDという特殊なクッキーを利用します。クッキーはサーバーには保存されず、クライアントの側だけに保存されます。
入り口から出口まで アクセス解析や、ログインに利用されている なりすまし防止によい |
セッションとは
セッションは、ログイン情報を保存するのに利用されます。
PHPのセッションは、PHPSESSIDという名前のクッキーを使います。
1回目:クッキー(PHPSESSID)の発行
1. ページにアクセスして、クッキーを要求します。(クライアント) 2.セッションを発行します(サーバー) 3.セッションを送ります(サーバーから) 4.セッションを保存します(クライアント) |
サーバーはセッションIDを参照して
自動的にWebサーバ上のファイル、もしくはデータベースに保存されているデータと関連付けます
2回目:セッションを発行済みの場合
すでにクッキー(PHPSSID)を持っている場合。
1. ページにアクセスしたときに、すでに発行されている、PHPSSIDをサーバーに送ります。 2. サーバーに保存してある、値を参照します。 3. リクエスト(ページなど)を返します。 |
セッションを使う理由とは
セッションは、サーバー側にデーターを保存してあります。
これが、クッキーと違う点です。
サーバー側にデータを保存してあるので、書き換えなどができません。つまり、セキュリティーが高まります。
さらに、実際のデータがネットワーク上に流れません。これでなりすましを防止する事ができます。
セッションを使ってみよう
session_start関数がある
セッションの使い方ですが、シンプルに session_start関数 を使って開始します。
ユーザーがページにアクセスする事で、セッションがスタートします。
「session_start関数」が呼ばれて、$_SESSIONという、スーパーグローバル変数が使えるようになります。$_SESSIONは、セッション情報を保持するためのスーパーグローバル変数です。
session_start(); |
「session_start();」を宣言することで、セッション管理を開始します。
セッションへ変数を登録するには
<?php |
このように書きます。 「maki」という文字列を保存しています。
中身を取り出すには
session_start(); |
セッションはサーバー側に保存されています。
違うWebページにまたがっても、同じセッションを取り出すことができます。
サーバー側について詳しく
xamppだとhtdocsフォルダと同じ階層のtmpフォルダに、セッションの情報が作成されます。
$_SESSIONに書いたものは全部このファイルに書かれます。
セッションを削除する方法
セッションを削除する場合、サーバー側とユーザー側の二つの側面を考える必要があります。
サーバーとユーザー側、両方のセッションを消す必要がある。という事です。
まずは、正しい書き方です。
<?php // セッションを切断するにはセッションクッキーも削除する。 // サーバー側のセッションを破壊する |
【参照】
セッションを完全に破棄する方法
この方法が完璧です。
<?php // セッションを切断するにはセッションクッキーも削除する。 // サーバー側のセッションを破壊する |
まずはここからです。
$_SESSION = array(); |
PHPではセッション変数は連想配列の形で保持されます。
array()は空の配列を生成するので、連想配列$_SESSIONは初期化されます。参照をなくした$_SESSIONの中身は、ガベージコレクションによって解放されます。
クライアントのクッキーを破棄する
if (isset($_COOKIE[session_name()])) { |
クライアントに「クッキー」として記録されているセッションIDの破棄をします。
セッションIDはクッキーで管理する場合と、POSTパラメータで管理する場合があります。
クッキーで管理する場合は、クッキーを破棄しないと、クライアントのブラウザにセッションIDが残ったままになります。
session_name()関数とは?
session_name()は、セッションID名を取得するための関数です。
初期状態では、セッションID名は'PHPSESSID'という文字列になっています。つまり、session_name()の戻り値は'PHPSESSID'となります。
クッキーには、PHPSESSID=1ab6309dのような形で値が記録されています。
この場合、
セッションID=1ab6309d
となります。
サーバはセッションIDによって、誰からアクセスされたのかを判別しています(この仕組みをセッションという)。
ここでは、ブラウザのクッキーに記録されているPHPSESSID=1ab6309dを破棄したいわけです。
最初のif文は、PHPSESSIDという名前でクッキーが記録されているかを調べます。
セッション管理にクッキーを用いていない場合はここでfalseとなり、ifの中に入りません。
ifの中に入った場合はPHPSESSIDというクッキーを破棄する。
session_destroy関数
session_destroy()は、現在のセッションに 関連づけられた全てのデータを破棄 します。
これは、サーバー側のセッションIDを破棄する事を意味しています。
セッションに関するグローバル変数は破棄しません。さらに、セッションクッキーを破棄しません。
利用環境・・・PHP 4, PHP 5, PHP 7
■戻り値について
成功した場合に TRUE を、失敗した場合に FALSE を返します。
完全に削除するには、セッションクッキー(PHPSESSID)も 削除する必要があります。
PHPSESSIDを破棄するには
if (isset($_COOKIE["PHPSESSID"])) { |
注意点について
session_unset()を使うように説明しているページが多くあるがこれは間違っています。
$_SESSIONを使う場合session_unset()を使ってはいけません。
unset($_SESSION)などもだめです。
これをすると、セッション変数を格納する連想配列が消えてしまいます。
次のセッション変数を登録できなくなってしまう。
【参照】
session_destroyについて>>
セッションの補足
一連の処理の始まりから終わりまでを表しているということです。
今回は、2番目に記載されているHTTPセッションについて学びます。
例えば、ネットショッピングの場合
ログインし、商品をカートに入れ、購入まで一連の処理(セッション)として扱いたいですが、HTTPはステートレスのため、一連の処理(セッション)として扱えません。
そこでCookieを利用して、一連の処理(セッション)として扱います。
Cookieに一意の値を入れ、リクエストするときにCookieにある値も一緒に送ってもらうことで、識別可能になり、一連の処理として扱えるようになります。
Cookieを利用することで、セッション管理が行えます。
リクエストするときに識別可能な値を入れてもらうだけなので、Cookieを使わずに、リンクのURLに値を記述してリクエストしてもらったり、フォームに値を記述してリクエストしてもらうことで、セッション管理することも可能です。 ただ他の方法は、Cookieを使う方法と比べて、情報が漏洩する可能性が高いので、Cookieを使ってセッション管理するのが一般的です。
【参照】
PHPの勉強方法
目安は1日3~5時間の勉強で100日程度です。実際にやってみましたが、仕事をしながらだと、200日ほどかかります。なぜなら、休日の家族サービス。モチベーションの低下などがあるからです。
前置きはさておき、まずは勉強方法です。
PHPを学ぶには、独自の言葉を覚える必要があります。「・」が付いているものは、外部のサイトへ飛びます。
■ 基本編 ■
PHPとは?
設定方法
PDOとは何か?
mysql_connect()
-> アロー演算子とは?
データベースへのアクセスについて
■ DBへの接続■
PDOについて知ろう
■ フレームワーク ■
フレームワークは何を使ったらいいのか?
ララベルとは?
コードイグナイターとは?
オートロードとは
無名関数とは?
MVCとは何か?
■ オブジェクト指向■
クラス・インスタンス・プロパティ
オブジェクト指向とは?
お気軽にご相談くださいませ。
この記事を読んだ人は、こんな記事も読んでいます
SEO対策の基本 外部要因とは?
SEO対策の基本的である、外部要因とは何か?
SEO対策をするなら絶対に知っておきたい、基本知識です。
売れるサイトを作るのに知って起きたい知識
サーチエンジンマーケティングという言葉をご存知でしょうか?
ホームページで商品やサービスを売る時に知っておきたいマーケティング
についてご紹介いたします。
SEO対策をする5つのメリットとは?
なぜ上位表示させることが大事なのか?なぜSEO対策をする必要があるのか
についてご紹介させていただきます。
SEO対策の内部要因とは?
上位表示させるためには、内部要因について知っておくことも大事です。
キーワードを上位表示させるために必要なのは、ソースコードを最適化することです
内部要因の対策について知りたい方はこちらへ
キーワード対策をする前に
そのキーワード対策。ちょっと待ってください。
そのまま対策をすると、必ずお金を損してしまいます。個人事業主や中小企業は
そんな大きなキーワードで対策をしてはいけません。
広告費用が高くなる本当の理由とは?
売れないサイトに集めていませんか?広告費用がかかるわりには
お問い合わせが少ない・・・と感じる方は多いはずです。
購入率の悪いサイトに集客をしている可能性があります。