web-dev-qa-db-ja.com

PHPセッション変数の設定解除

私は初心者プログラマーなので、明らかな間違いをおforびします。過去1週間、製品データベースの作成に少し時間を費やしました。フォームを使用して製品を追加したり、追加されたすべての製品を表示したりすることができます。フォーム入力データを介して作成されたセッションを使用しています。製品の削除ページを機能させるのに苦労しています。unsetを使用して変数をクリアしようとしましたが、機能しすぎません。

セッション変数を設定する製品の追加ページ:

$_SESSION['Products'][] = $_POST; //is how i set the session on the add products page. 

unset $_SESSION['Products'][]; //is how i have tried to clear the session although it does not work.

正しい方向の任意のポイントが高く評価されます!

37
bbowesbo

次を使用してセッション変数を設定解除できます。

  1. session_unset -すべてのセッション変数を解放します(使用するのと同じです:$_SESSION = array();
  2. unset($_SESSION['Products']);-セッション変数のProductsインデックスのみを設定解除します。 (覚えておいてください:使用したとおりではなく、関数のように使用する必要があります)
  3. session_destroy —セッションに登録されているすべてのデータを破棄する

session_unsetsession_destroyの使用の違いを知るには、この SO answer を読んでください。それが役立ちます。

73
Thamilan

設定解除は関数です。したがって、どの変数を破棄する必要があるかを送信する必要があります。

unset($var);

あなたの場合

unset ($_SESSION["products"]);

セッション変数全体をリセットする必要がある場合は、

session_destroy ();
10
Don D

私がしたのと同じ理由で誰かがこのページに来た場合に備えて、私はこの答えを含めています。問題を突き止めようとして恥ずかしい時間を無駄にしただけです。私が呼んでいた:

unset($_SESSION['myVar']);

ログアウトスクリプトから。その後、ログインが必要なページに移動しても、サーバーはまだログインしていると判断しました。問題は、ログアウトスクリプトが呼び出していないことでした。

session_start();

セッション変数を設定解除しても、最初にセッションを開始しないと機能しません。

4
Jeff Martin

セッションを完全にクリアしたい場合、これを使用できます:

session_unset();
session_destroy();

実際には両方は必要ではありませんが、害はありません。

特定の部分だけをクリアしたい場合、これが必要だと思います:

unset($_SESSION['Products']);
//or
$_SESSION['Products'] = "";

必要に応じて。

4
JRsz

unsetは関数であり、演算子ではありません。 unset($_SESSION['key']);のように使用して、そのセッションキーを設定解除します。ただし、session_destroy();も使用できます。 (必ずsession_start();でセッションを開始してください)

2
mehulmpt