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

ナビゲーションに移動 検索に移動
235行目: 235行目:
     {
     {
       print($_COOKIE["PHPSESSID"].'<br>');
       print($_COOKIE["PHPSESSID"].'<br>');
    }
?>
</syntaxhighlight>
<br><br>
== セッション名の取得と変更 ==
セッションを開始した時、クライアントのクッキー名として使用する変数(セッション名)において、初期値はPHPSESSIDである。<br>
この値の初期値は、php.iniファイルで設定されている。<br>
<br>
この初期値を変更する場合は、php.iniファイルの<code>session.name</code>項目を編集する。<br>
<u>セッション名は英数字を組み合わせて指定する必要がある。</u><br>
例. session.name = HOGE
<br>
セッション名がPHPSESSIDではない可能性があるため、<code>session_name</code>関数を使用してセッション名を取得する。<br>
string session_name([string name])
session_name関数は、カレントのセッション名を返す。
nameを指定する場合、カレントのセッション名はその値に変更される。
セッション名は、リクエストが開始された際に セッション名に保存されたsession.nameの値にリセットされる。
したがって、各リクエストごとに(session_start関数またはsession_register関数を呼ぶ前に)、session_name関数を実行する必要がある。
パラメータ:
    name  新しく設定したいセッション名
戻り値:
    現在のセッション名
<br>
<code>session_name</code>関数を引数無しで実行することにより、現在のセッション名を取得できる。<br>
また、引数に別のセッション名を指定する場合は、セッション名を変更することが可能である。<br>
<syntaxhighlight lang="php">
<?php
    session_name("phpsession");
    session_start();
?>
<?php
    print('現在のセッション名は'.session_name().'です。');
?>
</syntaxhighlight>
<br><br>
== セッションIDの取得と変更 ==
セッションIDは自動的にランダムな値が設定されるが、<code>session_id</code>関数を使用して、任意の値に設定することもできる。<br>
<br>
string session_id([string id])
session_id関数は、カレントのセッションIDを取得・設定するために使用される。
パラメータ:
    id  カレントのセッションIDを置換する。その際、session_start関数の前に呼ぶ必要がある。
        セッションハンドラによっては、セッションIDとして使用できる文字に制限がある場合がある。
        例えば、ファイルによるセッションハンドラにおいて、セッションIDとして使用できる文字は、a-z、A-Z、0-9に限られる。
戻り値:
    session_id関数は、カレントのセッションのセッションID・カレントセッションが存在しない(カレントのセッションIDが存在しない)場合、
    空文字列""を返す。
<br>
<code>session_id</code>関数を引数無しで使うことで現在のセッションIDを取得することができる。<br>
また、引数に値を指定する場合は、セッションIDを指定した値に変更できる。<br>
<br>
ただし、セッションIDは、セッションハイジャック等を防ぐためにも簡単な値を設定してはならない。<br>
したがって、任意でセッションIDを指定しない方がよいと考えられる。<br>
<syntaxhighlight lang="php">
<?php
    session_start();
?>
<?php
    if(!isset($_COOKIE[session_name()]))
    {
      print('初回の訪問です。セッションを開始します。');
    }
    else
    {
      print('セッションは開始しています。<br>');
      print('クッキーは '.$_COOKIE[session_name()].' です。<br>');
      print('session_id関数は '.session_id().' です。<br>');
     }
     }
  ?>
  ?>

案内メニュー