「PHPの基礎 - セッション」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
129行目: 129行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
次に、session_destroy関数を使用して、セッションに登録された値を全て破棄する。<br>
次に、<code>session_destroy</code>関数を使用して、セッションに登録された値を全て破棄する。<br>
  bool session_destroy(void)
  bool session_destroy(void)
   
   
139行目: 139行目:
     成功した場合はtrue、失敗した場合はfalseを返す。
     成功した場合はtrue、失敗した場合はfalseを返す。
<br>
<br>
以下の例では、Sample1.phpのログアウトのリンクを選択して、Sample2.phpでセッションとクッキーを削除している。<br>
次に、Sample3.phpでセッションとクッキーが正常に削除されているかを確認している。<br>
  <syntaxhighlight lang="php">
  <syntaxhighlight lang="php">
  // Sample1.php
  // Sample1.php
172行目: 174行目:
  ?>
  ?>
   
   
  <p><a href="./Sample1.php">ログアウトする</a></p>
  <p><a href="./Sample2.php">ログアウトする</a></p>
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
200行目: 202行目:
   
   
     session_destroy();
     session_destroy();
    print('<p>ログアウトしました</p>');
  ?>
  ?>
   
   

2021年3月5日 (金) 17:01時点における版

概要

PHPにおいて、セッションを利用する方法を記載する。


セッションの開始

セッションとは、クッキーは管理する値をクライアントに保存するのに対して、セッションは管理する値をサーバに保存する。
クライアントには、どのセッションを使用しているかを識別するためのセッションIDのみをクライアントに保存する。

一般的に、セッションIDをクッキーの値としてクライアントに保存する。(セッションを使用する場合、クッキーも同時に使用する)
また、重要なデータを扱う場合はセッションを使用する。

クライアントから初めてアクセスがある場合、session_start関数を使用して、新しいセッションを作成してセッションを開始する必要がある。

bool session_start()

session_start関数は、セッションを作成する。
もしくは、リクエスト上でGET、POST、クッキーにより渡されたセッションIDに基づき、
現在のセッションを復帰する。

戻り値:
   常にTRUEを返す。


セッションが開始されていない状態でsession_start関数が呼ばれる場合、新しいセッションを開始してセッションIDを割り当てる。
セッションIDは、クライアントにクッキー名PHPSESSIDで保存される。
(クライアントがクッキーを利用できない場合、次のセクションに記載する)

既にセッションが開始されているクライアント(既にセッションIDがクッキーとして保存されているクライアント)からアクセスがある場合、
session_start関数を実行しても新たにセッションを開始せずに、サーバに保存されているセッション変数を利用できるように準備する。

以下の例では、セッションを開始して、クライアントにセッションIDがクッキーとして保存しているか確認している。
初めてアクセスする場合、セッションIDが割り当てられて、クライアントは自動的にクッキーを利用してセッションIDを保存する。
次回以降は、クッキー名PHPSESSIDがクライアントから送信されて、新たにセッションは開始されずに、以前のものを利用する。

また、セッションIDにはランダムな値が設定される。

 <?php
    session_start();
 ?>
 
 <?php
    if(!isset($_COOKIE["PHPSESSID"]))
    {
       print('初回の訪問です。セッションを開始します。');
    }
    else
    {
       print('セッションは開始しています。<br>');
       print('セッションIDは '.$_COOKIE["PHPSESSID"].' です。');
    }
 ?>



セッション変数の書き込みと読み込み

セッションを開始することで、サーバに管理する値(セッション変数と呼ぶ)を複数保存することができる。
クライアントごとに様々な値が書き込まれるため、セッションIDを識別子として、クライアントを識別することができる。

セッション変数に値を書き込む場合は、定義済みの変数$_SESSIONを使用する。

$_SESSION[セッション変数名] = 値


例えば、セッション変数visitedに値を書き込む場合、以下のように記述する。

$_SESSION["visited"] = 1;


以下の例では、セッションを開始して、セッション変数visitedに値を保存している。
同一のWebページにアクセスするごとにセッション変数の値を増加させて、前回アクセスした日時も表示している。

 <?php
    session_start();
 ?>
 
 <?php
    if(!isset($_SESSION["visited"]))
    {
       print('初回の訪問です。セッションを開始します。');
 
       $_SESSION["visited"] = 1;
       $_SESSION["date"] = date('c');
    }
    else
    {
       $visited = $_SESSION["visited"];
       $visited++;
 
       print('訪問回数は'.$visited.'です。<br>');
 
       $_SESSION["visited"] = $visited;
 
       if(isset($_SESSION["date"]))
       {
          print('前回の訪問日時は'.$_SESSION["date"].'です。<br>');
       }
 
       $_SESSION["date"] = date('c');
    }
 ?>



セッション変数の削除とセッションIDの削除

保存されたセッション変数を削除するには、unset関数を使用する。

void unset(mixed var [, mixed var [, mixed ...]])

unset関数は、指定した変数を破棄する。

パラメータ:
   var  削除したい変数


以下の例では、セッション変数visitedを削除している。

 unset($_SESSION("visited"));


また、全てのセッション変数を削除するには、以下のように空の配列を変数$_SESSIONに代入する。

 $_SESSION = array();


※注意
変数$_SESSION自体を削除しないこと。

ログアウト等でセッション自体を破棄する場合、クライアントに保存されているセッションIDを削除した後、セッションを破棄する。
まず、クライアントにはクッキーが保存されているため、クッキーを削除する。
(クッキーの削除については、PHPの基礎 - クッキー#クッキーの削除を参照すること)

 if(isset($_COOKIE["PHPSESSID"]))
 {
    setcookie("PHPSESSID", '', time() - 1800, '/');
 }


次に、session_destroy関数を使用して、セッションに登録された値を全て破棄する。

bool session_destroy(void)

session_destroy関数は、現在のセッションに 関連づけられた全てのデータを破棄する。
この関数は、セッションに関するグローバル変数を破棄しない。
また、セッションクッキーを破棄しない。

戻り値:
   成功した場合はtrue、失敗した場合はfalseを返す。


以下の例では、Sample1.phpのログアウトのリンクを選択して、Sample2.phpでセッションとクッキーを削除している。
次に、Sample3.phpでセッションとクッキーが正常に削除されているかを確認している。

 // Sample1.php
 
 <?php
    session_start();
 ?>
 
 <?php
    if(!isset($_SESSION["visited"]))
    {
       print('初回の訪問です。セッションを開始します。');
 
       $_SESSION["visited"] = 1;
       $_SESSION["date"] = date('c');
    }
    else
    {
       $visited = $_SESSION["visited"];
       $visited++;
 
       print('訪問回数は'.$_SESSION["visited"].'です。<br>');
 
       $_SESSION["visited"] = $visited;
 
       if(isset($_SESSION["date"]))
       {
          print('前回の訪問日時は'.$_SESSION["date"].'です。<br>');
       }
 
       $_SESSION["date"] = date('c');
    }
 ?>
 
 <p><a href="./Sample2.php">ログアウトする</a></p>


 // Sample2.php
 
 <?php
    session_start();
 ?>
 
 <?php
    print('セッション変数の一覧を表示します。<br>');
    print_r($_SESSION);
    print('<br>');
 
    print('セッションIDを表示します。<br>');
    print($_COOKIE["PHPSESSID"].'<br>');
 
    print('<p>ログアウトします</p>');
 
    $_SESSION = array();
 
    if(isset($_COOKIE["PHPSESSID"]))
    {
       setcookie("PHPSESSID", '', time() - 1800, '/');
    }
 
    session_destroy();
 
    print('<p>ログアウトしました</p>');
 ?>
 
 <p><a href="./Sample3.php">ログアウトの確認</a></p>


 // Sample3.php
 
 <?php
    session_start();
 ?>
 
 <?php
    print('セッション変数の確認をします。<br>');
    if(!isset($_SESSION["visited"]))
    {
       print('セッション変数visitedは登録されていません。<br>');
    }
    else
    {
       print($_SESSION["visited"].'<br>');
    }
 
    print('セッションIDの確認をします。<br>');
    if(!isset($_COOKIE["PHPSESSID"]))
    {
       print('セッションは登録されていません。<br>');
    }
    else
    {
       print($_COOKIE["PHPSESSID"].'<br>');
    }
 ?>