Contents
PHPのセッション
ウェブサイト全体のさまざまなページでデータにアクセスできるようにするもう1つの方法は、PHPセッションを使用することです。
セッションは、登録されたセッション変数とその値が格納されているサーバー上の一時ディレクトリにファイルを作成します。このデータは、その訪問中のサイトのすべてのページで利用可能になります。
一時ファイルの場所は、session.save_pathというphp.iniファイルの設定によって決まります。セッション変数を使用する前に、このパスを設定しておく必要があります。
セッションが開始されると
- PHPはまず、その特定のセッションの一意の識別子を作成します。これは、3c7foj34c3jj973hjkop2fc937e3443のような32個の16進数のランダムな文字列です。
- PHPSESSIDと呼ばれるCookieは、ユーザーのコンピュータに自動的に送信され、固有のセッション識別文字列を格納します。
- ファイルは指定された一時ディレクトリー内のサーバー上に自動的に作成され、sess_sess_3c7foj34c3jj973hjkop2fc937e3443という接頭部が付いた一意のIDの名前が付いています。
PHPスクリプトがセッション変数から値を取得しようとすると、PHPは自動的にPHPSESSIDクッキーから一意のセッション識別子文字列を取得し、その一時ディレクトリ内でその名前を持つファイルを探し、両方の値を比較することによって検証を行うことができます。
ユーザーがブラウザを失った後、またはサイトを離れた後にセッションが終了すると、サーバーは一定の時間(通常は30分)後にセッションを終了します。
PHPセッションの開始
PHPセッションは、session_start()関数を呼び出すことで簡単に開始できます。この関数は、セッションがすでに開始されているかどうかを最初に確認し、開始されていない場合は起動します。ページの先頭にsession_start()を呼び出すことをお勧めします。
セッション変数は$ _SESSION []と呼ばれる連想配列に格納されます。これらの変数は、セッションの存続期間中にアクセスできます。
次の例では、セッションを開始し、セッション中にページが訪問されるたびにインクリメントされるcounterという変数を登録します。
セッション変数がすでに設定されているかどうかを確認するには、isset()関数を使用します。
<?php session_start(); if( isset( $_SESSION['counter'] ) ) { $_SESSION['counter'] += 1; }else { $_SESSION['counter'] = 1; } $msg = "あなたは一ページ目を" $_SESSION['counter']; $msg .= "ひらきました"; ?> <html> <head> <title>Setting up a PHP session</title> </head> <body> <?php echo ( $msg ); ?> </body> </html>
こうなる
あなたは一ページ目を 1 ひらきました
PHPセッションの破棄
PHPセッションは、session_destroy()関数で破棄することができます。この関数は引数を必要とせず、1回の呼び出しですべてのセッション変数を破棄することができます。単一のセッション変数を破棄したい場合は、unset()関数を使用してセッション変数の設定を解除することができます。
ここでは、単一の変数を設定解除する例を示します。
<?php unset($_SESSION['counter']); ?>
ここにすべてのセッション変数を破壊する呼び出しがあります。
<?php session_destroy(); ?>
自動セッションを有効にする
php.iniファイルでsession.auto_start変数を1に設定できる場合、ユーザーがサイトにアクセスしたときにstart_session()関数を呼び出してセッションを開始する必要はありません。
クッキーなしのセッション
ユーザーが自分のPCにクッキーを保存することを許可しない場合があります。したがって、セッションIDをブラウザに送信する別の方法があります。
また、セッションが開始された場合に定義される定数SIDを使用することもできます。クライアントが適切なセッションCookieを送信しなかった場合は、session_name = session_idという形式になります。それ以外の場合は、空の文字列に展開されます。したがって、URLに無条件に埋め込むことができます。
次の例は、変数を登録する方法と、SIDを使用して別のページに正しくリンクする方法を示しています。
<?php session_start(); if (isset($_SESSION['counter'])) { $_SESSION['counter'] = 1; }else { $_SESSION['counter']++; } $msg = "You have visited this page ". $_SESSION['counter']; $msg .= "in this session."; echo ( $msg ); ?> <p> To continue click following link <br /> <a href = "nextpage.php?<?php echo htmlspecialchars(SID); ?>"> </p>
こうなる
You have visited this page 1in this session. To continue click following link
htmlspecialchars()は、 XSS関連攻撃を防止するためにSIDを印刷する際に使用することができます。3ヶ月10万円で受講できる転職特化型Ruby実践研修【ポテパンキャンプ】
次のページ⑱PHPを使用して電子メールの送信