投稿者 メッセージ
<  PHPプログラミング  ~  セッション変数
ヴぇくたー
投稿1時間: 土 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.次のページに移ると、セッション変数は消滅してしまっています。。。

どうすればうまく動作するでしょうか?
トップに移動
ユーザー情報を表示 メッセージを送信 ウェブサイトに移動 MSN メッセンジャー
n
投稿1時間: 日 12月 12, 2004 9:10 pm  引用
ゲスト





session_start() してますか?
トップに移動
ヴぇくたー
投稿1時間: 日 12月 12, 2004 9:41 pm  引用



登録日: 2004年11月 22日
投稿記事: 55
所在地: 東京都

はい。行っています。
トップに移動
ユーザー情報を表示 メッセージを送信 ウェブサイトに移動 MSN メッセンジャー
n
投稿1時間: 日 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]
トップに移動
ヴぇくたー
投稿1時間: 月 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;

としてみました。。。

他に何かアドレス直入力飛び対策の妙案があれば、教えてください<(_)>
トップに移動
ユーザー情報を表示 メッセージを送信 ウェブサイトに移動 MSN メッセンジャー
ゲスト
投稿1時間: 金 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.次のページに移ると、セッション変数は消滅してしまっています。。。

どうすればうまく動作するでしょうか?
トップに移動
特定期間内の記事を表示:   
All times are GMT +9:00

次のトピックを表示
前のトピックを表示
Page 1 of 1
フォーラム一覧  ~  PHPプログラミング

トピックの新規投稿   返信


 
移動先:  

新規投稿: 不可
返信: 不可t
自分の記事の編集: 不可
自分の記事の削除: 不可
投票への参加: 不可




Powered by phpBB
customized by phpspot.