2012-04-28 18 views
1

私は理解できなかったPHPのセッションでこの問題を抱えています! PHPで `session_destroy()`が動作しないのはなぜですか?

session_start(); 
$sid = session_id(); 
session_unset(); 
session_destroy(); 
echo $sid; 

は、論理的に、それは私に与えるべき異なるセッションIDを起こすたびに、明らかに私は session_destroy()を呼ぶが、それは単にセッションを殺すません。
私はPHPファイルに次のコードを持っています。それは常に私に同じセッションIDを与えます!
私は間違っているのですか?

session_destroy(); 
session_unset(); 
session_regenerate_id(true); 

編集:私にとって

+0

新しい_セッション_を取得していれば、同じIDでよいはずです。私が覚えている限り、あなたはすべきです。 –

+0

@JoachimIsakssonまあ、セッションIDに基づいてユーザーを認証するアプリケーションを実装しているため、これらのことを完全に制御する必要があるため、別のものにする必要があります。 –

+0

@ラジオ、うーん...それは考えです。 –

答えて

4

は、唯一の次の組み合わせは、完全にセッションを破壊するために完璧に動作完璧

<?php 
session_start(); 
$sid = session_id(); 
echo $sid; 
echo "<br />"; 

//destroy session 
session_destroy(); 
session_unset(); 

//now start the new session 
session_start(); 
session_regenerate_id(true); 
$sid = session_id(); 
echo $sid; 
?> 

この作品の:あなたはこれを試していました。

+0

ここでも違いはありません! –

+0

サンプルコードが追加されました。これを試しましたか?それは完全に動作します。 –

+0

はい、これは完全に機能します。ありがとうございました。 @Ispcity –

2

seesion_id() concept

このリンクを参照してください。 idを指定すると、現在のセッションIDが置き換えられます。その目的のためにsession_start()の前にsession_id()を呼び出す必要があります。この例があり

は、PHPのよう

はあなたが二回セッションを開始したときに通知を得る4.3.3と述べています。 session_id()を使用して、セッションがすでに開始されているかどうかを検出できます。スクリプトを作成する前に、セッションIDがわからない場合にsession_id()がfalseを返すことを知っておく必要があります。これで、セッションが開始されていればスクリプトの魔法を作ることができ、そうでなければセッションを開始します。

This is what you get then: 
<?php 
if(!session_id()){ 
session_start(); 
} 
?> 
関連する問題