ホームページ > バックエンド開発 > PHPチュートリアル > php_PHP チュートリアルのセッションに関する基本的な知識

php_PHP チュートリアルのセッションに関する基本的な知識

WBOY
リリース: 2016-07-13 10:50:17
オリジナル
824 人が閲覧しました

PHPでは、セッションはページ間で受け渡せるサーバーグローバル変数であるため、サーバー側のユーザーメンバーのログイン認証にもよく使用されます。セッションの安全性も非常に高いです。PHPセッションに関する基礎知識を紹介します。

セッションについてどう思いますか?あなたがそれを勉強したかどうかはわかりませんが、今日はダナイの PHP トレーニング教師がこれに関する内容を皆さんと共有したいと考えています。

セッションのライフサイクルはどれくらいですか

1 ブラウザが終了するとライフサイクルも終了しますが、ファイルは /tmp/(sess_???) にまだ存在します

2 セッション ID は、次回ブラウザを再度開いたときに再割り当てされます。 session_id() を使用して以前の ID を戻すと、/tmp に残っている sess_??? が読み取られ、以前の設定がすべて取得されます。
3 PHP.iniでセッションファイルの残り時間を変更できます

session.gc_maxlifetime = 1440; この秒数が経過すると、保存されます
データは「ゴミ」とみなされます
GCプロセスによってクリーンアップされました
デフォルトは 1440 秒、24 分です

セッションを使用する場合はストレージパスの問題に注意してください

php.ini のセッション設定を見てください

[セッション]
session.save_handler = データの保存/取得に使用されるファイル
session.save_path = /tmp 引数が save_handler に渡されます
ファイルの場合、これは
です データファイルが保存されているパス

デフォルトでは、このディレクトリは必ずしも存在しない可能性があります。 ! ! これを c:/php

などの PHP インストール パスに変更することをお勧めします。

PHPのSESSIONの仕組みを徹底的に理解する 1.session.save_handler = files

* 1.session_start()

1. session_start() はセッションメカニズムの開始です。セッションはファイルに保存されるため、一定の確率でガベージコレクションが開始されます。 PHP 自体のガベージ コレクションが無効である場合、SESSION のリサイクルにはファイルの削除が必要です。この確率は php.ini の設定によって決まります。 ただし、一部のシステムでは session.gc_probability = 0 (確率が 0 であることを意味します) になっており、ガベージ コレクションは cron スクリプトを通じて実装されます。

session.gc_probability = 1
session.gc_divisor = 1000

Session.gc_maxlifetime = 1440 //有効期限のデフォルトは 24 分です

//確率は session.gc_probability/session.gc_divisor の結果 1/1000、
// セッションのガベージ コレクションでは各ファイルの有効期限が切れているかどうかを確認する必要があるため、小さすぎる設定はお勧めできません。
session.save_path = // システムごとにデフォルト設定が異なるようです。 1 つの設定は "N;/path" です。 //これはランダムな階層ストレージです。この場合、ガベージ コレクションは機能しないため、独自のスクリプトを作成する必要があります

2. セッションは現在 $_COOKIE[session_name()] が存在するかどうかを判断し、 session_name() は session_id を保存する COOKIE キーの値を返します。 この値は php.ini から見つけることができます

session.name = PHPSESSID //デフォルト値 PHPSESSID

                                       

3. 存在しない場合は、session_id が生成され、生成された session_id が COOKIE 値としてクライアントに渡されます。 これは、次の COOKIE オペレーションを実行するのと同じです。このステップでは setcookie() オペレーションが実行され、COOKIE がヘッダーで送信されることに注意してください。 PHP には別の関数 session_regenerate_id() があり、この関数を使用すると、これより前に出力がありません。
️ setcookie(session_name(),

session_id()、
session.cookie_lifetime,//デフォルトは0
session.cookie_path,//デフォルトの「/」は現在のプログラムとディレクトリで有効です
session.cookie_domain,//デフォルトは空です
)

4. 存在する場合は、 session_id = $_COOKIE[session_name];

次に、session.save_path で指定されたフォルダーに移動して、「SESS_id()」という名前のファイルを見つけます。
ファイルの内容を読み取り、デシリアライズして、$_SESSION に入れます
* 2. $_SESSION
に値を代入 たとえば、新しい値 $_SESSION['test'] = 'blah'; を追加すると、この $_SESSION はスクリプトの実行が終了したときにのみメモリ内に保持されます。 $_SESSION の値を session_id で指定されたフォルダーに書き込み、関連するリソースを閉じるために使用します。この段階で session_id を変更することができます。 たとえば、古い session_id を破棄し、新しい session_id を生成します。その半分はカスタム セッションの操作とロール変換に使用されます。 たとえば、Drupal の匿名ユーザーは、ログインするときに新しい session_id を使用する必要があります。
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time() - 42000, '/');//古いセッション Cookie の有効期限が切れます
}
session_regenerate_id();//このステップでは新しい session_id が生成されます

//session_id() は新しい値を返します


3. SESSION の書き込み操作
スクリプトの最後で、SESSION 書き込み操作が実行され、$_SESSION の値が session_id で指定されたファイルに書き込まれます (このファイルは既に存在している可能性があります)。 新しいファイルの作成が必要になる場合があります。
* 4.セッションを破棄します
SESSION によって送信される COOKIE は通常、インスタント COOKIE であり、ブラウザを閉じると期限切れになります。

有効期限を手動で強制する必要がある場合。 たとえば、ブラウザを閉じる代わりにログアウトするには、コード内の SESSION を破棄する必要があります。

方法はたくさんあります。 o 1. setcookie(session_name(), session_id(), time() - 8000000, ..);//ログアウトする前に実行します
o 2. usset($_SESSION);//これにより、すべての $_SESSION データが削除されます。更新後、COOKIE が渡されますが、データはありません。
o 3. session_destroy();//この関数はより完全で、$_SESSION を削除し、セッション ファイルを削除し、session_id を削除します
览 ブラウザがオフになっていない場合は、再度更新してください。 2 と 3 で渡された Cookie は存在しますが、データが見つかりません。
2.session.save_handler = ユーザー

ユーザー定義のセッション処理メカニズム、より直感的
* session_set_save_handler('open', 'close', 'read', 'write', 'destroy', 'gc'); 1.session_start()、
open($save_path, $session_name) を実行してセッション操作ハンドルを開きます

$save_path session.save_handler = filesの場合は、session.save_path,

ただし、ユーザーがカスタマイズした場合、これら 2 つのパラメーターはどちらも使用されず、直接 TRUE が返されます

read($id) を実行してそこからデータを読み取ります。//このパラメータは自動的に session_id() に渡され、この値を通じて操作できます。

* 2.スクリプトの実行が終了します

Execute write($id, $sess_data) //2 つのパラメータ、非常にシンプル
* 3. ユーザーが session_destroy() を必要とする場合
最初に破棄を実行してから、ステップ 2 を実行します。
実際の例:

コードは次のとおりです コードをコピー

//SESSION が初期化されるときに呼び出されます
関数オープン($save_path, $session_name)
{
グローバル $sess_save_path;
$sess_save_path = $save_path;
return(true);
}

// 閉じるときに呼び出されます
関数close()
{
return(true);
}

関数読み取り($id)
{
グローバル $sess_save_path;
$sess_file = "$sess_save_path/sess_$id";
return (文字列) @file_get_contents($sess_file);
}
//スクリプトの実行が終了する前に、書き込み操作を実行します
関数書き込み($id, $sess_data)
{
echo "sdfsf";
グローバル $sess_save_path;

$sess_file = "$sess_save_path/sess_$id";
If ($fp = @fopen($sess_file, "w")) {
$return = fwrite($fp, $sess_data);
fclose($fp);
return $return;
} else {
return(false);
}

}

関数 destroy($id)
{
グローバル $sess_save_path;

$sess_file = "$sess_save_path/sess_$id";
return(@unlink($sess_file));
}

関数 gc($maxlifetime)
{
グローバル $sess_save_path;

foreach (glob("$sess_save_path/sess_*") as $filename) {
If (filemtime($filename) + $maxlifetime < time()) {
@unlink($filename);
}
}
true を返します;
}


PHP セッション PHP セッションにユーザー情報を保存する前に、まずセッションを開始する必要があります。

注: session_start() 関数は タグの前に配置する必要があります。

コードは次のとおりですコードをコピー

上記のコードは、ユーザー情報の保存を開始できるようにユーザーのセッションをサーバーに登録し、ユーザーのセッションに UID を割り当てます。
セッション変数の保存
セッション変数を保存および取得する正しい方法は、PHP $_SESSION 変数を使用することです:

php session_start() ?>

;



コードは次のとおりです コードをコピー

session_start();
// セッションデータを保存します
$_SESSION['ビュー']=1;
?>


//セッションデータを取得します
echo "ページビュー数". $_SESSION['ビュー数'];
?>


出力:

ページビュー=1

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632652.html技術記事 phpでは、セッションはページ間で受け渡せるサーバーグローバル変数なので、サーバー側のユーザーメンバーのログイン認証によく使用されます。セッションのセキュリティも非常に高いです...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート