Page: 2/2  << 
スポンサーサイト

一定期間更新がないため広告を表示しています

| スポンサードリンク | | - | - | pookmark |
セッションの流れとその仕組み
セッション機能を使うには$_SESSION変数に値を格納する。PHPはこの変数の値をサーバ上のファイルに保管する。

また、PHPのsession_start関数は、ブラウザから送信されるcookieの値をもとにアクセスしているユーザを特定し、そのアクセス専用の$_SESSION変数を復元させる。

以下、セッションの一連の流れ

1.初めてのアクセス
ブラウザからサーバ上のPHPスクリプトにアクセスする。

2.セッションIDとセッションを保持するセッションファイルを作成
session_start関数は初めてのアクセスか、二度目以降のアクセスかを判別する。初めての場合は「セッションID」を生成する。

このセッションIDを元に$_SESSION変数に格納された値を保持するためのファイルをサーバ上に生成する。この時点ではファイルの中身は空。

3.$_SESSIONに格納された値をファイルに書き込む
PHPスクリプトの実行が完了すると、$_SESSIONに格納された値が「2」で生成されたセッションファイルに書き込まれる。

4.ヘッダとHTMLの出力をする
サーバからブラウザにレスポンスを返す際にセッションIDがヘッダに記載される。(ieHTTPHeadersでこの値は確認できる)

5.サーバから送信されたセッションIDをブラウザがcookieとして保存する
サーバから送信されたcookie情報をブラウザが受け取って保存する。

PHPには「session.cookie_lifetime」という設定があり、cookieの有効期限を設定することが出来る。デフォルトは0で、これはブラウザが閉じられるまで有効であることを意味する。

6.別ページへ遷移する際、自動的にcookie値がサーバに送信される
ブラウザに保持されているcookie値(ここではセッションID)は、同じドメインにアクセスした時、自動的にヘッダ情報に記載されてサーバ側に通知される。

7.セッションIDを受け取るとsession_start()関数はセッション変数を復活させる
セッションIDがcookieによって通知された場合、session_start関数はセッションファイルから値を取り出し、$_SESSIONの値を復活させる。

8.session_start()後、$_SESSIONが復活する
前画面で設定された$_SESSIONは続きのスクリプトのように利用できる。ここで$_SESSION変数が書き換えられても、3〜7の手順で次のスクリプトにセッション変数の値が引き継がれる。
| php | 11:43 | comments(0) | trackbacks(0) | pookmark |
一般変数とスーパーグローバル変数
定義済み変数の$_SERVER, $_COOKIE, $_GET, $_POST等をスーパーグローバル変数と言う。この変数はいくつかの点で一般の変数と違う。

◆スコープ
一般の変数にはその変数が使える有効範囲が決められており、これを「スコープ」という。

◆グローバル変数
関数の外で宣言された変数は「グローバル変数」という。(グローバルのスコープにある変数)

このグローバル変数の場合、関数の内部においてはそのまま使うことが出来ないが、global宣言を行うことで関数内部においても使用可能になる。

// 一般変数である$global_variableをグローバル変数にする
global $global_variable;

◆スーパーグローバル変数
このグローバル変数に対して、スーパーグローバル変数はグローバルにおいても、関数内部においても、global宣言等をすることなく変数の値を取り出す(利用することが)出来る。

ただし、グローバル変数はphpが定めたものに限る。
| php | 11:12 | comments(0) | trackbacks(0) | pookmark |
$_SERVER変数
◆$_SERVER変数について

$_SERVERは$_POSTや$_GET, $_COOKIEと同じようにPHPであらかじめ定義された定義済みの変数。以下のようなコードを記述したphpファイルをphpが動作するディレクトリに配置し、ブラウザでアクセスすると、この$_SERVER変数に格納されている各値を見ることが出来る。
<?php
print "<pre>";
print_r($_SERVER);
print "</pre>";
?>

◆$_SERVER変数に格納されている各値について

$_SERVERに格納される値は、phpのヴァージョンや実行環境、アクセスするブラウザなどによって異なるので注意が必要。

以下、主要な幾つかの値について。

[HTTP_ACCEPT_LANGUAGE]
Webブラウザから送信される言語コード

[HTTP_USER_AGENT]
Webブラウザから送信されるユーザエージェント(OS, ブラウザの種類)

[SERVER_SIGNATURE]
サーバのバージョン情報

[SERVER_NAME]
サーバのホスト名

[REMOTE_ADDR]
アクセスを行ったユーザのIPアドレス

[REMOTE_PORT]
サーバにアクセスを行ったポート番号

[DOCUMENT_ROOT]
実行されているスクリプトのドキュメントルート

[SCRIPT_FILENAME]
実行されているスクリプトの絶対パス

[QUERY_STRING]
ユーザがアクセスを行ったクエリストリング

[REQUEST_URI]
実行しているページの完全なURL

[SCRIPT_NAME]
実行しているスクリプト自身のURL

[PHP_SELF]
実行しているページのURL
| php | 10:51 | comments(0) | trackbacks(0) | pookmark |
setcookie関数について / session vol.3
setcookie(保存するcookie名, 保存する値, 有効期限, 対象のドメイン名, 対象のディレクトリ, セキュアオプション, HTTPonly)

◆保存するcookie名
保存するcookie名を指定する。PHPが受け取った際、$_COOKIE変数のキーとなる。

◆保存する値
cookieに保存する値を指定する。PHPが受け取った際、$_COOKIE変数に格納される値となる。

◆有効期限
cookieの有効期限をUNIXタイムスタンプで指定する。とくに指定しない場合はブラウザが閉じられるまでが期限となる。(期限の過ぎたcookieがブラウザによって送信されることはない)

◆対象のドメイン名
Webブラウザがcookieを送信するドメインを指定する。

◆対象ディレクトリ
Webブラウザがcookieを送信するディレクトリを指定する。

◆セキュアオプション
セキュアオプションに引数TRUEを与えると、WebブラウザはSSL(暗号化通信)によるアクセス時にしかcookieを送信しなくなる。これにより安全性が高まる。

◆HTTPonly
HTTPonlyにTRUEを与えるとWebブラウザはHTTPアクセス時にのみcookieを送信する。XSS(クロスサイトスクリプティング)のように、JavaScript等でcookie情報を盗まれる危険性を減じることが出来る。(この設定は全てのブラウザがサポートしているわけではない)
| php | 17:28 | comments(0) | trackbacks(0) | pookmark |
クッキーとその仕組み / session vol.2
セッション機能はWebブラウザが持つクッキー(cookie)という機能を利用して実現している。

サーバ側でPHPがWebブラウザに対してcookie情報を書き出すにはsetcookie関数を使う。

一度ローカルに保存されたcookie情報は次からのリクエストの際にWebブラウザが自動的にサーバ側へ送信する。

Webブラウザが送信するcookie情報は$_COOKIE変数で取得出来る。

cookie.php
<?php

// COOKIEに値が格納されているかを確認する
if (isset($_COOKIE["username"])) {
print htmlspecialchars($_COOKIE["username"].ENT_QUOTES)."さん、いらっしゃい。";
} else {

?>

<form action="cookie_save.php" method="post">
あなたの名前を入力してください。
<input type="text" name="username" value="" />
<input type="submit" name="name_submit" value="送信" />
</form>

<?php
}
?>


次に、setcookie関数を使って入力された名前をcookieに保存する。

cookie_save.php
<?php
// セッション機能を開始
if (isset($_POST["username"])) {

// 入力されたusernameをcookieに格納している
// 有効期限は120秒(2分)
setcookie("username", $_POST["username"], time()+120);

print "お名前をcookieに保存しました。<br />";
print "2分以内に再度<a href='cookie.php'>cookie.php</a>にアクセスしてください。";
}
?>

>> setcookie関数についての詳細
| php | 17:18 | comments(0) | trackbacks(0) | pookmark |
セッション機能 / session vol.1
◆セッション変数とは($_SESSION)

Webアプリケーションでは基本的にひとつのPHPファイルでひとつの画面が構成される。そのため、複数の画面を作る場合は、その画面の数だけPHPファイルが必要となる。

通常、ユーザが閲覧しているPHPスクリプト画面においてスクリプトの実行が終了するとPHPの変数はサーバのメモリ上から消えてしまう。次の画面に進んだときには、前画面で変数にセットされた値は全てクリアされた状態になっている。

しかし、画面が遷移しても継続して以前の変数を保持しておきたい場合がある。例えば会員専用ページがあるサイト等。

こういったサイトでは、ログイン成功時に「PHP変数内にログインに成功した証拠」を保持しておき、その他の全ての会員専用ページにアクセスするたびに、この「証拠」があるかどうかを確認している。

このように画面を遷移しても変数を保持しておくには「セッション機能」を使う。

◆セッション機能を使う

セッション機能は「$_SESSION」という変数に値を格納することで利用できる。この機能は仕組みをしっかり理解しておかないとセキュリティホールやバグ発生原因となりやすいので注意が必要。

$_SESSION変数を利用するには、session_start();関数を一度だけ呼び出す必要がある。呼び出さないまま利用すると、ただの変数として扱われてしまうので注意が必要。

*session_start();は一番先頭に記述(PHPスクリプトの)されていることが望ましい。
◆実際にセッション機能を実装する

ログイン画面(session1.php)>> 会員専用画面(session2.php)>> ログアウト画面(session3.php)という流れでセッション機能を実装していく。

session1.php(ログイン画面)
<?php
// session_start関数の実行によってsessionを開始する
session_start();

// session変数に値を格納する
// 通常session変数には配列で値を格納する
// 配列の形で値を格納することで、無数に値を保持することが出来る
$_SESSION["loginname"] = "username_sample";

// ↑ ここではloginnameというキーに値を格納している
// この配列は別のスクリプトでもログイン認証のための変数となる
?>

セッションを開始しました。<br />
ログインしている状態です。
<a href="session2.php">次のページ</a>に進んで下さい。

続いて、会員専用画面を作成する。この画面では、ログイン画面で格納したセッション変数の値が正しく代入されているかを判定する。(正しいログインかどうかを簡易的に確認する)

変数が正しく格納されていない場合はエラーメッセージを出力し、正しい場合はログインが成功している人にのみ閲覧が許されたコンテンツを表示する。

*ログイン画面を経由せずに直接この画面へアクセスすることを「防がなくてはならない」画面である。

session2.php(会員専用画面)
<?php
// session開始
session_start();

if ($_SESSION["loginname"] != "username_sample") {

// エラー時に出力するメッセージ
echo "このページをご覧になるにはログインが必要です。";
echo "既にログイン情報は削除されていますので、再度ログインをし直してください。";
echo "<a href='session1.php'>ログインページへ</a>";
} else {

// ログインに成功すると表示されるメッセージ
echo "<ul>
<li>会員専用画面です。</li>
<li>ログイン認証に成功しました。現在はログイン状態です。</li>
<li>次はログアウトによるセッション情報の削除処理です。</li>
<li><a href='session3.php'>ログアウトへ</a></li>
</ul>";
}
?>

ログアウト画面では、この後に会員専用画面へアクセスが出来ないようにセッション変数を削除する。(ログインしている証拠をなくしてしまう)これによって、再度ログインしなければ会員専用画面にはアクセスできなくなる。

ログインの初期化は、array構文によって配列のセッション変数を空にすることで行う。

session3.php(ログアウト画面)
<?php
// セッション開始
session_start();

// array関数でセッションの配列を空にして初期化する
$_SESSION = array();

echo "
セッションをクリアしてログアウトした状態です。<br />
セッションチェックをする会員専用ページに遷移すると、
セッション情報がないのでエラーメッセージが表示されます。<br />
<a href='session2.php'>会員専用ページ</a>に進んでみてください。<br />
<a href='session1.php'>ログイン画面へ</a>";
?>
| php | 16:33 | comments(0) | trackbacks(0) | pookmark |

Calendar

    123
45678910
11121314151617
18192021222324
252627282930 
<< June 2017 >>

Recommend

Recommend

Recommend

Profile

Search

Entry

Comment

Archives

Category

Link

Feed

Others

無料ブログ作成サービス JUGEM

Mobile

qrcode

Sponsored Links