phpでsessionの値をunsetで削除したいのですがIEでは上手くいくのですがFirefoxだと余分なものまで削除されます。


<?php
function item_delete($delete_id){
$array_index = array_search($delete_id,$_SESSION['stock_item_id']);
if($array_index !== FALSE){
unset($_SESSION['stock_item_id'][$array_index]);
}
}
?>


セッションの中身はこの様なものです。
$_SESSION['stock_item_id'][0] = 3;
$_SESSION['stock_item_id'][1] = 6;
$_SESSION['stock_item_id'][2] = 3;



上記のコードで以下を実行すると
item_delete(3);

$_SESSION['stock_item_id'][0] = 3;
$_SESSION['stock_item_id'][2] = 3;

の二つが消えてしまいます。

これはFirefox3でのみ再現されました。

どういった原因でこうなるのでしょうか?

原因が解らない場合はセッションから特定の値を削除する別の方法でも結構です。

回答の条件
  • 1人2回まで
  • 登録:2008/09/14 00:53:57
  • 終了:2008/09/14 10:53:10

回答(1件)

id:ctrl-v No.1

ctrl-v回答回数289ベストアンサー獲得回数152008/09/14 04:05:16

ポイント60pt

上記のスクリプトでIE、Firefox3を使い実験してみました。

File1.php セッションを書き込むだけのファイル

<?php
session_start();
$_SESSION['stock_item_id'][] = 3;
$_SESSION['stock_item_id'][] = 6;
$_SESSION['stock_item_id'][] = 3;
echo "<a href=file2.php>File2へ移動</a>";
?>

File2.php セッションを読み込んで削除

<?php
session_start();
item_delete(3);
var_dump($_SESSION);//ダンプで表示

function item_delete($delete_id){
$array_index = array_search($delete_id,$_SESSION['stock_item_id']);
if($array_index !== FALSE){
unset($_SESSION['stock_item_id'][$array_index]);
}
}
?>

結果、IE、FireFox3ともに「$_SESSION['stock_item_id'][0] = 3;」のみが消え、

さらにFile2を再読み込みすると「$_SESSION['stock_item_id'][2] = 3;」も消えました。

「item_delete(3);」で値が「3」のものを削除しているのですから、最初に$_SESSION['stock_item_id'][0] = 3;が、次に$_SESSION['stock_item_id'][2] = 3;が削除されてもおかしくありません。

Firefoxで表示した際に再読み込み等のアクションを行ったのが原因ではないでしょうか。

セッションデータはブラウザを閉じるまで有効ですので、そのような結果になったのだと推測されます。

id:kuromon

解決しました。

結局、ブラウザの再読み込みが原因でした。

HTMLの箇所のimgタグのソース部分を空白にしていたら

Firefoxの場合、再読み込みを自動で行うようです。

2008/09/14 10:51:16

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません