0

session_id() についてはあまり詳しくありませんが、

私はこのようなphpでコードを使用しています

a.php私はこのコードを使用しています

$_SESSION['sid']=session_id();

私がいるときb.php、私はセッションSIDをエコーし​​てから、このように設定を解除しています..

echo $_SESSION['sid'];
unset($_SESSION['sid']);

表示するd5tk0123nmj56

もう一度、a.php にアクセスしてから b.php にアクセスすると、再び同じ結果が得られますd5tk0123nmj56

2回目のセッションは違いますか??? 私はすでにセッションを設定解除しているためb.php..

EDIT:

私はそれをテストしていますlocalhost

ANOTHER EDIT

すべてを説明的に説明すると、..カートシステムを使用しています。最初に、ユーザーがメールIDでログインしているかどうかを確認しているため、 $_session['logged_user']=user_email は1つのセッションです..私は使用しています$_session['sid']=session_id() は、カートのトランザクションを識別するための一意のセッションとして、ユーザーがチェックアウト (支払い) した後、ログイン状態で何かを再度購入する可能性があるため、もう一度確認する必要があります。ログインしている (logged_user が存在する必要がある)。次のトランザクションでは、$_SESSION['sid']=a new session_id(); に別の値を割り当てたい。

私が知っているように(私が間違っているかもしれません) session_destroy() はすべてのユーザーセッションを強制終了し、セッション $_SESSION['logged_user'] も破棄します..

4

5 に答える 5

4

セッションを破棄したいと思います。試す

session_destroy(); 

セッション ID を再生成するには、次を試してください。

session_regenerate_id(true);
于 2013-01-07T03:11:07.617 に答える
1

これは、ユーザーがまだ同じセッションを持っているためです。ユーザーの観点からセッションを終了することはありません。サーバー側でいくつかのセッションデータの設定を解除しているだけです。

セッションIDは、Cookie(デフォルトではPHPSESSIDと呼ばれます)を介してサーバーに送信されます。b.phpサーバー側でセッションデータの設定を解除していますが、次にユーザーがアクセスしたときに、ユーザーはa.php同じCookieを送信し、以前と同じIDでセッションを開始します。

  • サーバー側のセッションデータの設定を解除するには、を使用する必要がありますsession_destroy()(これにより、セッションIDが変更されたり、クライアント側のCookieの設定が解除されたりすることはありません)
  • 新しいセッションIDを生成するには、を使用できますsession_regenerate_id(true)(これにより、クライアント側のCookieが新しいセッション識別子で上書きされます。セッションに関連付けられているサーバー側の情報が破棄されることはありません)

ユーザーのセッションを完全に終了するには、サーバー側の情報とクライアント側のCookieの両方を破棄し、新しいセッション識別子を生成する必要があります。これが簡単な例です、

<?php
    session_start();    
    $_SESSION['blah'] = true;

    var_dump(session_id()); // q4ufhl29bg63jbhr8nsjp665b1
    var_dump($_SESSION);    // blah = true

    session_unset();
    session_destroy();
    setcookie("PHPSESSID", "", 1); // See note below
    session_start();
    session_regenerate_id(true);

    var_dump(session_id()); // gigtleqddo84l8cm15qe4il3q3
    var_dump($_SESSION);    // (empty)
?>

ヘッダーには、クライアント側で変更されているセッションIDが表示されます。

リクエストヘッダー
Cookie:PHPSESSID = q4ufhl29bg63jbhr8nsjp665b1

レスポンスヘッダー
セット-Cookie:PHPSESSID = delete; Expires = Mon、27-Dec-2010 16:47:57 GMT
PHPSESSID = gigtleqddo84l8cm15qe4il3q3; パス=/

setcookie()(とにかく新しいセッションを作成しているので、ここで電話をかけなくても逃げることができます。そのため、Cookieは新しいIDで上書きされますが、古いCookieを明示的に破棄することをお勧めします)。

于 2013-01-07T03:17:29.153 に答える
1

そのようにセッションを強制終了したのではなく、セッション ID を保持する変数の設定を解除しただけです。あなたがした場合:

$unsetMe = session_id();
unset($unsetMe);

変数を設定解除するだけで、セッションに対して何も行われません。以下を使用する必要があります。

session_destroy();
于 2013-01-07T03:23:51.130 に答える
0

新しいセッション ID を生成し、古い ID の場所に保存するには:

$_SESSION['sid']=session_regenerate_id(true);

于 2013-01-07T03:32:45.543 に答える
0

$_SESSION['sid']実際のセッション ID ではなく、server-global-var の設定を解除します

session_destroy();session_id を「設定解除」するために使用します

PHP: session_destroy() マニュアル

于 2013-01-07T03:11:45.603 に答える