2010-12-08 16 views
0

私はLAMPサーバー上でPHPプロジェクトを開発しています。セッション変数とローカル変数に問題があります。私のシステムでは、first.phpはセッションの値を設定し、次にsecond.phpではこれらのセッション変数をローカル変数に設定します。次に、アクションを取ってSession values.Butをクリアして、ローカル変数の値を失います。この問題はどのように解決できますか?コーディングの流れの 構造は、あなたはその後、それはあなたが最初の& 2番目のスクリプトを持っているすべてをである場合second.phpセッション値はローカル変数を上書きすることができます

$var = $_SESSION['var'] ; 
$_SESSION['var'] = ""; 
echo $var;   // at this time ,i cant also see my local variable values 
+0

'$ _SESSION ['var'] =" ";'の前にチェックしましたか? –

+0

はい、私はそれを行い、$ _SESSION ['var']とローカル変数に値があります。 –

答えて

0

register_globalsがオンになっています。これは、非常に悪いことです。これは、エンドユーザーがスクリプト内に変数を挿入できるようにするためです(例では、クッキーを使用しています)。

廃止予定です。それをオフにする(php.iniで、またはできない場合はphp_flagディレクティブの.htaccessで)。スクリプトがそれに依存している場合は、スクリプトを変更します。

+0

はい、今は私のプロジェクトの.htaccessファイルにregister_globalsを設定することで解決します。あなたの答えはたくさんあります。 –

1

でfirst.php

$_SESSION['var'] = "test"; 

を以下のように似ていますあなたのスクリプトのいずれかまたはすべての開始時に、間違いなくsession_start()が見つかりませんでした。

あなたのPHPエラーログを見てみると、何が欠けているのか、何が間違っているのかをよりよく理解できます。セッションを使用する各スクリプトの冒頭にsession_start()がある場合、コードは正常に実行されているはずです。

session_start()を明示的にコールしないと、変数$_SESSIONはユーザ定義変数にすぎません。そのため、最初のスクリプトではユーザ定義変数に値を割り当て、2番目のスクリプトでは単に呼び出します存在しないユーザー定義変数。 phpは大文字と小文字が区別されるので、$_SESSION$_Sessionと同じではないことに注意してください。これらは、参照によって割り当てられた場合を除き、変数をリモートで上書きすることができます方法はありません

、この例を見てみ:

$b = 1; 
$a =& $b; 
echo $a; // will output 1 
$b = 2; 
echo $a; // will output 2 

Hereは、参照はPHPでどのように動作するかの素敵な説明です。

+0

はい、私もすべてのページでsession_start()を呼び出します。セッション変数をクリアする前に、ローカル変数は値を保持します。ローカル変数はセッション値をクリアした後に値を失いました。ローカル変数とセッション変数に同じ名前を付けることに関連しています。今、私はphp.iniのポイントを見つけました。これは[register_globals On]です。ここで[register_globals Off]に変更してから、セッション変数をクリアした後でローカル変数に影響はありません。 –

+0

さて、あなたは正しいことをしました、それは 'session_start()'の欠け以外の唯一の説明です。 '$ _PEST ['var']'と '$ _SESSION ['var']'を呼び出すのと同じですが、 '$ _SESSION ['var']'は実際に '$ var'という変数を呼び出します。 $ _GET ['var'] 'であるため、セッション変数に空のテキストを割り当てることは、変数自体に割り当てることと同じです。ここでは、それについての良い議論があります:http://groups.google.com/group/comp .lang.php/browse_thread/thread/bac6f1c426ef4b22/c3b0666dea7d75fd –

関連する問題