1

Zend_Session のコードを調べて、セッションの開始を実装する方法をよりよく理解しようとしました。コード内で、彼らは私がよく理解していないことをしています。

$hashBitsPerChar = ini_get('session.hash_bits_per_character');          
if (!$hashBitsPerChar) {
    $hashBitsPerChar = 5;
}           
switch($hashBitsPerChar) {
    case 4: $pattern = '^[0-9a-f]*$'; break;
    case 5: $pattern = '^[0-9a-v]*$'; break;
    case 6: $pattern = '^[0-9a-zA-Z-,]*$'; break;
}           
if(!preg_match('#'.$pattern.'#', $id)){             
    session_id(md5(session_id()));              
    $regenerateId = true;
}

私が理解するのが難しいのは、not ( ^ ) を持つパターンがあり、それが一致しない場合は、セッションを開始する前に一時的なセッション ID を作成する理由です。これは私には意味がありません-なぜ彼らは持っていないに対してプレグマッチをするの0-9a-zA-Z-,ですか? ここで何が起こっているのかよくわからないので、理解したいと思います。

ありがとう

4

1 に答える 1

1

正規表現のカレットはパターンを反転しません。行頭に一致するアンカーです。

に設定された値に応じて、メソッドは特定の正規表現( 、、、またはsession.hash_bits_per_characterのいずれかのゼロ以上の一致)をセッション識別子認識パターンとして選択します。[0-9a-f][0-9a-v][0-9a-zA-Z-,]

そのパターンが現在のセッション識別子と一致しなかっ!preg_match(...)た場合(3つのパターンのいずれかと一致しなかった場合)、セッション識別子が再生成されます。現在のセッション識別子のMD5ハッシュが新しいセッション識別子になり、再生が発生したことを示すフラグが設定されます。

于 2013-01-25T05:27:35.173 に答える