2016-11-28 5 views
0

非常に簡単な実験。カスタムセッションIDを使用してPHPセッションを永続化する方法

if (!isset($_SESSION)) { 
    session_id(random_string()); 
    session_start(); 
} 

echo session_id(); 

random_string()単にランダムな20文字のA-Z、Z、0-9文字列を返す:私は含まれindex.phpが持っています。

その if文の前 session_start()への呼び出しがないので、それは常に新しいセッションIDを生成しますこのページをリロードで

、および存在しないスーパーグローバル(再開)$_SESSION。私は、スクリプトの先頭にsession_start()への呼び出しを置けば

しかし、私は、カスタムIDを設定するため、session_start()の呼び出しの前を発生することがある、カスタムのセッションIDを指定するための私のチャンスを失ってしまいました。

私はこれを理解できません。鶏/卵の問題。では、どのようにしてカスタム・セッションIDを正常に実装すれば、スーパー・グローバルがページ・ロードの間に生き続けるでしょうか?

+0

PHPセッションは信頼性が低いと評されています。セッション用にデータベースを使用する方がよいでしょう。 – khuderm

+0

したがって、ブラウザが閉じられるか、またはユーザーごとに同じセッションIDを保持したいですか? – Perumal

答えて

0

ファイルシステムとデータベースの助けを借りて、ページ全体で独自のカスタマイズされたセッションIDを持つことができます。私は、ファイルシステムの方法を使用して、すべてのページを同じセッションIDを追跡するために、次のコードを書いている:私はこのコードがどのように効率的ではわからない

if(filesize('session_track.txt') === 0) { 
    file_put_contents('session_track.txt', random_string()); 
} 

$session_id = file_get_contents('session_track.txt'); 
session_id($session_id); 
session_start(); 

// Here is the conditional statement, in case you need to regenerate your custom session id again 
$regenerate_custom_session_id = false; // if need, set it to true. 

// This code depends on your requirements. I just mentioned this conditional statement for your understanding to make it logically work 
if($regenerate_custom_session_id === true) { 
    file_put_contents('session_track.txt', ''); 
} 

。私はちょうどそれを働かせるために私の考えを共有しました。

関連する問題