投稿者 |
メッセージ |
|
< PHPプログラミング ~ セッション変数 |
|
時間:
土 12月 11, 2004 6:24 pm
|
|
|
登録日: 2004年11月 22日
投稿記事: 55
所在地: 東京都
|
|
飛んでこられたときの対策として、セッション変数を必要なものだけを残して残りを削除したいと思っています。
以下のような感じで組んでみました。。
/* セッション一時格納 */
$sample = $_SESSION['sample'];
/* 何が残っているのかわからないので・・・・ */
session_unset();
/* セッション再保存 */
$_SESSION['sample'] = $sample;
こうした場合、ページを戻ったりすると・・・・
Warning: Unknown(): Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0
となが〜〜〜いエラーの末、セッション変数が1になってしまいます。。。
そこで、session_unset()の下にsession_destroy()を追加してみましたが、今度は次のページの認証用のセッション変数がおかしな動作をします。
1.現在のページ内では認証用セッション変数(これはGETメソッドのものを保存しています)は値を保持しています。
2.次のページに移ると、セッション変数は消滅してしまっています。。。
どうすればうまく動作するでしょうか? |
|
|
|
|
|
|
|
時間:
日 12月 12, 2004 9:10 pm
|
|
|
|
|
|
|
|
|
時間:
日 12月 12, 2004 9:41 pm
|
|
|
登録日: 2004年11月 22日
投稿記事: 55
所在地: 東京都
|
|
|
|
|
|
|
時間:
日 12月 12, 2004 10:10 pm
|
|
|
|
エラーを見ると、
「4.2.3まであった機能(session side-effect)に頼っているかもしれない。
セッションのextention($_SESSIONのこと?)がグローバルになっていないか、
そうでなければ register_globals が On になっている。
session.bug_compat_42
か、
session.bug_compat_warn
を それぞれOff にしてみてください」
みたいに書いてありますよ。
これはきっと php.ini に書かれていると思いますのでそこを Off にしてみては?[/code] |
|
|
|
|
|
|
|
時間:
月 12月 13, 2004 2:04 am
|
|
|
登録日: 2004年11月 22日
投稿記事: 55
所在地: 東京都
|
|
原因は値が入っていない変数をセッション変数に登録していたからのようです。
$a = $_SESSION['a'];
$b = $_SESSION['b'];
session_unset();
$_SESSION['a'] = $a;
$_SESSION['b'] = $b;
以上の状態で$aはa、$bはbのページで使用されるセッション変数です。
aを通って飛んだ場合、bは通っていませんからbのセッション変数は値を持ちません。
ですので、$bには登録されていない変数が代入されているわけです。
その状態でセッション変数に変数を代入。。。。
$_SESSION['b'] = $b;
とすると、$bというのは、register_globalsの変数だと思われてしまうみたいなのです。
ですので、一応の解決策として
$a = $_SESSION['a'];
$b = $_SESSION['b'];
session_unset();
if ( isset ( $a ) $_SESSION['a'] = $a;
if ( isset ( $b ) $_SESSION['b'] = $b;
としてみました。。。
他に何かアドレス直入力飛び対策の妙案があれば、教えてください<(_)> |
|
|
|
|
|
|
|
時間:
金 3月 10, 2006 7:51 pm
|
|
|
|
ヴぇくたー wrote: |
飛んでこられたときの対策として、セッション変数を必要なものだけを残して残りを削除したいと思っています。
以下のような感じで組んでみました。。
/* セッション一時格納 */
$sample = $_SESSION['sample'];
/* 何が残っているのかわからないので・・・・ */
session_unset();
/* セッション再保存 */
$_SESSION['sample'] = $sample;
こうした場合、ページを戻ったりすると・・・・
Warning: Unknown(): Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0
となが〜〜〜いエラーの末、セッション変数が1になってしまいます。。。
そこで、session_unset()の下にsession_destroy()を追加してみましたが、今度は次のページの認証用のセッション変数がおかしな動作をします。
1.現在のページ内では認証用セッション変数(これはGETメソッドのものを保存しています)は値を保持しています。
2.次のページに移ると、セッション変数は消滅してしまっています。。。
どうすればうまく動作するでしょうか?
|
|
|
|
|
|
|
|
|