[PHP-users 16497]Re: セッション破棄後画面が表示されない現象について

aiko vvv_aiko_vvv @ hotmail.com
2003年 7月 4日 (金) 05:57:00 JST


きしかわです。
桝形さん、伊藤さん、MATAMURAさんご返信どうもありがとうございます。

*伊藤さんへ*
> 1.OSって何なのでしょう?
> 
サーバー 	: Redhat7.3 Apache 1.3.27です。
クライアント: Windows2000 IE6.0 SP1 です。
( 他のマシンでの確認が詳しくできていないのです… すみません )

> 2.PHPのバージョンをPHP4.3.2かPHP4.3.3RC1に上げて確認
>     できますか?
現段階ではちょっと難しいです。

> 
> 3.設定で、
> 
>     output_buffering
>     output_handler
> 
>     は、無効にしていますよね( phpinfoで確認 )?
両方とも no value となっています。
サンプルの方もためさせていただきましたが問題なく動作いたしました。
どうもありがとうございます。

*伊藤さんへ*
> ここの session_unset() って意味が無いような。
$_SESSION = array();	// 全てのセッション情報の定義をクリア
session_destroy();	// セッション情報を破棄

"セッション変数を開放する"と
session_unset() に当たるのが、$_SESSION = array();ですね。
session_unset()とかsession_destroy()の役目を一緒くたにして考えてました。


*MATAMURAさんへ*
> 以前示して頂いた「白いページ」のソースに
> <!-- saved from url=(0044)http://test/login.php -->
> とありましたが、これはIEでファイルに保存した時にIEが
> 「どこのURLを保存したか」を記録したものです。
> つまり、「白いページ」はlogin.phpが出力したものです。
> さらに普通、PHPスクリプトが何も出力しなかった場合にPHPが
> 勝手に出力するHTMLに
> <META http-equiv=Pragma content=no-cache>
> とかって出力しないと思うので、login.phpが何かの条件で
> 意図的にこのページを出力したと考えられます。

白いページがどこから出ているのかわからなかったため、
PHPのセッション破棄とheader("Location: xxxx")について疑っていましたが、
login.phpが何らかの形で出力しているのですね。

この意見を元に、login.phpの中を見てみたところ、
先に示していませんでしたが、どうもJavaScript無効時の処理に原因がある様です。


★ログインファイル
***************************************************
<?php
  ob_start();
  session_start();

  // ここで、
  // ログインに必要なセッション変数をセットしている
  // ex) $_SESSION["xxxx"] = "xxxxxxxx" ;

  ob_end_flush();

  // JavaScript無効時の処理  ※ go_error.phpに遷移
  // ★ここをコメントアウトすると白い画面はでなくなった。
  print	"<noscript>\n" ;
  print	"<meta http-equiv=\"Refresh\" 
content=\"0;url=./go_error.php?code=1">\n" ;
  print	"</noscript>\n";
?>
<html>
<head>
<title>ログイン</title>
<script language="JavaScript">
<!--
  // IEか?
  // JavaScriptでエラー画面に遷移 ※ go_error.phpに遷移
  ret = MyCheck();
  if( !ret ) location.replace("./go_error.php?code=2");
 
  // クッキーは有効か? ※ go_error.phpに遷移
  if( !navigator.cookieEnabled ) location.replace("./go_error.php?code=3");

//-->
</script>
</head>
<body>
<?php
  // 画面作成

// My_log_write("login最後");	// ログ出力関数 --> 白い画面表示時にもきちんと
ログが残っている。
?>
</body>
</html>
***************************************************


上記のファイルで
  print	"<noscript>\n" ;
  print	"<meta http-equiv=\"Refresh\" content=\"0;url=./go_error.php?c
ode=1">\n" ;
  print	"</noscript>\n";
部分をコメントアウトしてテストした、今のところ白い画面は表示されていません。



本当にこれが原因なのかは不明ですが、原因であるとしたら

・JavaScriptの設定は変わらないのになぜmetaが効いてしまうのか。
・JavaScriptを無効にした場合の処理ではエラー画面が表示されるのに、白い画面と
なるのはなぜ?
・微妙に出力HTMLタグが異なるのはなぜか。
(DOCTYPEも違うし…大文字小文字も違うし…charsetも違うし…)

が疑問です。


★通常のエラー画面出力ソース
***********************************************************************
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="expires" content="Thu, 1 Jan 1970 00:00:00 GMT">
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>エラー</title>
</head>
<body>
<center>
<p>本システムは、JavaScriptを有効にしてください</span>
</center>
</body>
</html>
***********************************************************************

★白い画面ソース
***********************************************************************
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<!-- saved from url=(0044)http://test/login.php -->
<HTML><HEAD><TITLE></TITLE>
<META http-equiv=Pragma content=no-cache>
<META http-equiv=expires content="Thu, 1 Jan 1970 00:00:01 GMT">
<META http-equiv=Content-Type content="text/html; charset=shift_jis">
<META http-equiv=Content-Style-Type content=text/css>
<META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD>
<BODY></BODY></HTML>
***********************************************************************


すでにPHPからずれてますかね?
もうちょっと考えてみます。

アドバイスいただきありがとうございました。



きしかわあいこ。

_________________________________________________________________
ウイルスメール、迷惑メール対策なら MSN Hotmail http://www.hotmail.com/ 



PHP-users メーリングリストの案内