session は現在 $_COOKIE[session_name()] があるかどうかを判断します; session_name() は session_id を保存する COOKIE キーの値を返します。この値は php.ini session.name = PHPSESSID //デフォルト値 PHPSESSID から取得できます。
存在しない場合は、session_id が生成され、生成された session_id が COOKIE 値としてクライアントに渡されます。これは、次の COOKIE 操作を実行することと同じです。これは、PHP には別の関数 session_regenerate_id() があり、この関数を使用すると、以前は出力がありません。
それが存在する場合、 session_id = $_COOKIE[session_name]; 次に、 session.save_path で指定されたフォルダーに移動して、 ' SESS_'。session_id() ドキュメント。ファイルの内容を読み取り、デシリアライズして、$_SESSION に配置します。
2. $_SESSION に値を割り当てます
たとえば、新しい値 $_SESSION['test'] = 'blah'; を追加すると、この $_SESSION はスクリプトの実行が終了したときにのみ保持されます。 use $ session_id で指定されたフォルダーに _SESSION の値が書き込まれ、関連するリソースが閉じられます。
この段階では、古い session_id を破棄して新しい session_id を生成するなど、session_id を変更する操作を実行できます。Drupal 匿名ユーザーのようなカスタム セッション操作やロール変換に使用されます。 SESSION の場合、ログイン後に新しい session_id を使用する必要があります。
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time() - 42000, '/' );/ /古いセッション Cookie の有効期限が切れます
}
session_regenerate_id();//このステップでは新しい session_id が生成されます
//session_id() は新しい値を返します
3. SESSION 書き込み操作 スクリプトの最後で、SESSION 書き込み操作が実行され、$_SESSION の値が既に存在する場合と、新しいファイルに書き込まれます。を作成する必要がある場合があります。
4. SESSION を破棄します SESSION によって送信された COOKIE は通常、インスタント COOKIE であり、ログアウトするなど、手動で有効期限を強制する必要がある場合に期限切れになります。ブラウザを閉じるには、コード内で SESSION を破棄する必要があります:
setcookie(session_name(), session_id(), time() - 8000000, ..);//ログアウトする前に実行します
usset( $_SESSION);/ /これにより、すべての $_SESSION データが削除されます。更新後、COOKIE が渡されますが、データはありません。
session_destroy();//この関数はより徹底しており、$_SESSIONを削除し、セッションファイルを削除し、session_idを削除します
ブラウザを閉じずに再度更新すると、2と3でCOOKIEが渡されますが、データが見つかりません。
session.save_handler = user
ユーザー定義のセッション処理メカニズム、より直感的 session_set_save_handler('open', 'close', 'read', 'write', 'destroy', 'gc'); open($save_path, $session_name) を実行して、セッション操作ハンドルを開きます。 session.save_handler = files の場合、$save_path は session.save_path になりますが、ユーザーがカスタマイズした場合、これら 2 つのパラメーターはどちらも使用されず、直接 TRUE が返されます。 read($id) を実行してそこからデータを読み取ります。 //このパラメータは session_id() に自動的に渡され、この値を介して操作できます。
スクリプトの実行が終了したら、write($id, $sess_data) を実行します。 //2 つのパラメーター、非常に単純です
ユーザーが session_destroy() を必要とする場合は、最初に destroy を実行し、次にステップ 2 を実行します
実践的な例:
コードをコピーします
コードは次のとおりです: //SESSION の初期化時に
function open($save_path, $session_name) を呼び出します
{
global $sess_save_path = $save_path;戻る(true);
}
//閉じるときに
function close()を呼び出す
{
return(true);
function read($id)
{
global $sess_save_path; /sess_$id" ;
return (string) @file_get_contents($sess_file);
}
//スクリプトの実行が終了する前に、書き込み操作を実行します
function write($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;
return(false);
関数 destroy($id)
$sess_file; sess_save_path/sess_$id" ;
return(@unlink($sess_file));
}
function gc($maxlifetime)
{
global $sess_save_path;
foreach (glob("$sess_save_path/sess_*") as $filename) {
if (filemtime($filename) + $maxlifetime < time()) {
@unlink($filename)
}
return true;
http://www.bkjia.com/PHPjc/323987.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/323987.html
技術記事
session.save_handler = files 1. session_start() session_start() はセッションメカニズムの始まりであり、セッションは PHP 自身のガベージであるファイルに保存されるため、一定の確率でガベージコレクションを開始します。