見出し画像

SessionとCookieについて

「sessionとcookieってなんぞや!」というわけで今回はこのテーマ。

・xamppでPHPのインフォメーションを表示する

①C - xampp - htcdocsの中に「web1110」フォルダーを作る。
②「web1110」フォルダの中に「index.php」を作る。
③xamppのapacheをスタートする。

画像1

Visual Studio Codeで「index.php」を開き、
下記を入力
<!DOCTYPE html>
<html lang="ja">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>security</title>
</head>
<body>
   おーい
</body>
</html>
<?php
   phpinfo();
?>

画像2

ここでブラウザで「localhost/web1110/index.php」を見るとこうなる。
・PHPのInfomationと、HTMLの「おーい」が表示されている。

画像3

・PHPを省略して書く方法(余談)

ここで余談ですが、PHPは省略して書くことができる。
そういう場合はどうすればよいか。

画像4

・「Ctrl+F」で「short」を検索する。
・「short_open_tag」がOffになっている。

画像5

「short_open_tag」をOnにすると省略して書くことができるようになる。
変更箇所、C - xampp - phpの中の「php.ini」

画像6

メモ帳で「php.ini」を開く。

画像7

「short」で検索し、「short_open_tag=Off」を ➡「short_open_tag=On」に変更する。
※即時対応しないので注意。apacheをstopして再度startしてから確認する。
ブラウザで「localhost/web1110/index.php」を確認。⇩Onになっている。

画像8

省略してもいけるかどうか試してみるといけました。
(確認しただけなのでOffに戻しておきました。)

画像9

・localhostについて

VirtualBoxで作ったPHPを確認する際、ブラウザで「localhost/web1110/index.php」を入力して確認していますが、
実は自分の「固定IP/web1110/index.php」でも確認できる。
更に「127.0.0.1/web1110/index.php」でも確認できる。
下記参照。

画像10

なぜか。それはhostsというもので紐づけされているからです。

・hostsとは

hostsファイルとは、ドメインとIPアドレスの紐づけルールがかかれているものです。ちなみにhostsの場所は、自分のパソコンの「Cドライブ- Windows - System32 - drivers - etc - hosts」に存在する。

画像11

メモ帳でひらくとこんな感じ。ここで紐づけされているから同じものを見に行くようです。

画像12

ちなみに「127.0.0.1」と「::1」の違いは👇こういうことらしい。

画像13

・hostsファイルの書き方

IPアドレス+Tabキー+ドメイン(118.151.233.191&nbsp; &nbsp; example.com)
注)そのまま保存できない。デスクトップに移動して変更した後、元の位置に戻す。

画像14

こう書くとexample.comと118.151.233.191が紐づく。

・PHPで入力フォームを作る

sessionを確認するために、まずこういう入力フォームをつくる。

画像15

<?php
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>登録</title>
</head>
<body>
  <h1>登録</h1>
  
  <form action="confirm.php" method="post">
      <p>
          氏名:<input type="text" name="namae">
      </p>  
      <p>
          フリガナ:<input type="text" name="kana">
      </p>
      <p>
          住所:<input type="text" name="address">
      </p>
      <p>
          電話:<input type="text" name="tel">
      </p>
      <p>
          メール:<input type="text" name="email">
      </p>
      <input type="submit" name="send" value="送信">
  </form>    
</body>
</html>

送信を押すと(comfirm.php)に移動するようにしたい。
ここで注意することは、送信は「button」を使ってはいけない。ただの問い合わせのフォームに移動するボタンなどは使ってよいが、データを送るときは「submit」を使うこと!ポイント!

・送信ボタンを押すと移動するページを作る

「comfirm.php」を作る。
session_start();はphpでsessionを管理をスタートするという定型文
issetは()の中の変数に値がセットされていて、かつNULLでないときに、TRUE(真)とする関数
<?php

session_start();

if(isset($_POST)){
       $post = $_POST;
}

if(isset($_POST)){
   $_SESSION['person']=$post;
   echo "送信されました";
}else{
   $_SESSION['person']=array();
   echo "送信されませんでした"; 
}

?>

ブラウザ上で入力して送信ボタンを押すと、comfirm.phpで設定した表示(送信されました)が出ました。

画像16

うまくいったものの入力した情報がどうなっているのかは、この状態では確認できない。ちゃんと入力したものが引き継ぎされているか確認できるように「var_dump」を入れる。

<?php

session_start();

if(isset($_POST)){
       $post = $_POST;
}

if(isset($_POST)){
   $_SESSION['person']=$post;
   echo "送信されました";
}else{
   $_SESSION['person']=array();
   echo "送信されませんでした"; 
}
var_dump($_SESSION['person']);

?>

画像17

入力して送信ボタンを押すと、

画像18

でました。きちんと入力した情報が引き継がれているようです。
次に条件を付けました。
◆countは()内の文字数を数える関数
<?php

session_start();

if(isset($_POST) && count($_POST) > 0){
   $post = $_POST;
}

if(isset($_POST)){
   $_SESSION['person']=$post;
   echo "送信されました";
}else{
   $_SESSION['person']=array();
   echo "送信されませんでした"; 
}
var_dump($_SESSION['person']);

?>

画像19

画像20

ちゃんと表示されています 。

・Session(セッション)とは

セッションとは、サーバー側に一時的にデータを保存する仕組みのことで、
Web上でのログイン情報や最終アクセスなど、ユーザーに直接紐づくようなデータをセッションに格納して使う。
Cookieの仕組みに似ていますが、
・Cookie(クッキー)はブラウザ側・Session(セッション)はサーバー側
とデータの保存場所が異なります。
◆Cookieはブラウザ側に保存されるという性質上、ユーザーがデータを改ざんすることもできる。

・隣のパソコンの、「入力フォーム・入力後の情報」が自分のパソコンから見えるか。

別のパソコンで入力したindex.phpの入力が見えるか確認してみる。
「172.16.3.149/web1110/index.php」

画像21

普通に見える。
ここで入力したらconfirm.phpも見えるのか確認する。

画像22

見えてしまった。
危険!
SQLインジェクションなど仕掛けられたら、情報が抜き替えられたり書き換えられたりされてしまう。よそから来たものは受付ないようにしたい。
いや、しなければいけない。

・アクセスログの確認

ここで、xampp(サーバー)のログがどうなっているか確認してみます。

画像23

access.logをメモで開いて、一番最後を見る。

画像24

別の端末(172.16.3.149)からのアクセスがあるのがわかる。
因みに、
localhostでみたものは「::1」と表示。
172.16.3.115でみたものは「172.16.3.115」と表示されている。
172.16.3.149から入力されたものはきちんとログで残っていました。

・リファラーチェックとは

スパム対策として、フォームの送信がどのURLから行われたか(リファラー)をチェックし、プログラム上(PHP)で見知らぬURLからの送信は除外することができる。先ほどの式に下記を追加する。
if($_SERVER['HTTP_REFERER'] != "http://localhost/web1110/);

↑リファラーがlocalhostからでない場合

「$_SERVER['HTTP_REFERER']」

↑これは直前のURL(リファラー)を取得するものです。
もし直前のリファラーがlocalhostのindexからではない場合、comfirm.phpではなくindex.phpに移動する。
・リファラを見ることで、ユーザーがどのような経路でサイトに流入しているかを知ることができる。

・Cookie(クッキー)とは

・Cookie(クッキー)とはCookieとは、パソコンのブラウザ側に一時的にデータを保存する仕組みのこと。
たとえば、よく訪問するWebサイトにログインするときにIDやパスワードが履歴として出てきたり、ネットショッピングでショッピングカートに入れたものが一定の期間だけ保存されていたりする。
これは、Cookieが働いているためです。

Cookieの確認できる場所は、ブラウザの右上のチョンチョンをクリックして、設定を選択する。

画像25

プライバシーセキュリティタグの、Cookieと他のサイトデータ➤をクリック

画像26

画像27

ここにCookieが入っている。誰かが使う可能性のあるパソコンはセキュリティ上ここは全部削除しておいた方が良いでしょう。

・SessionのCookie

Session情報はブラウザを閉じるとリセットされる。
AmazonなどのECサイトだと、閉じてもカートに物が残っている。残っていない方が困る。
どうなっているのかというと、Session情報は消えるが、DBに保存されているということらしい。IDとパスワードを入力するので安全に利用できるそうです。

・Cookie情報がない状態で、初めてSessionをした時にはどう表示されるか

①Cookieを全て削除します。
②ブラウザも閉じてsessionを切り、再度たちあげる。
<?php

session_start();

if($_SERVER['HTTP_REFERER'] != "http://localhost/web1110/");
   
if(isset($_POST) && count($_POST) > 0){
  $post = $_POST;
}
if(isset($_POST)){
  $_SESSION['person']=$post;
  echo "送信されました";
}else{
  $_SESSION['person']=array();
  echo "送信されませんでした"; 
}
var_dump($_SESSION['person']);

?>

画像28

③入力フォームに入力して送信ボタンを押す。
④その時点で、ブラウザを右クリックして検証を開く。
⑤networkを選択。・・・何もでなかった。

画像29

でなかったらリロードすると出るらしい。出た。comfirm.phpをクリック

画像30

Headerを確認する。CookieがなくなっているのでSet-Cookie:~と初めてCookieがセットされる表示が出る。

画像31

もしCookieが残っていたらどう表示されるか。

画像32

こんな感じ。
Response Headersの中にSet-Cookieはなく、
Request HeadersにCookie情報が表示される。

・キャッシュがある場合、tmpログとの整合性は?

サーバーの「C - xampp - tmp」の中を確認すると
confirm.phpのNerworkのCookiesに残っているものを比べると、値が同じものがあった。この値は一意なものとして残る。パソコンでCookieを削除したとしてもサーバーにはログがしっかり残っていることが確認できた。

画像33

画像34

画像35

このログの中身をみてみる。メモ帳で開く。

画像36

先ほど入力した値が残っている。なんということでしょう!
サーバーの中に入られてしまうと、入力した情報を盗まれたり改ざんされてしまう!恐ろしい。

・Cookieが残っているかさらに確認する

新しくmypage.phpを作成する

画像37

表示してみると先ほど入力した情報がでた。

画像38

画像39

検証で確認してみると、Cookie情報が残っていた為、ちゃんと表示されたことがわかる。これは端末自体にに保存されている情報なので、違うパソコンからは見えない。

今日はここまで!

なにとぞ なにとぞー