0

セッションで管理ページを作成しようとしています。admin.php から次の 2 つのエラーが表示されます。

Deprecated: Function session_is_registered() is deprecated in /home/content/95/10216895/html/test/admin.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at /home/content/95/10216895/html/test/admin.php:4) in /home/content/95/10216895/html/test/admin.php on line 7

コードは次のようになります。

<?php
  //Start the session
  session_start();
  //Get the user name from the previously registered super global variable
  define(ADMIN, $_SESSION['name']);

  if (!session_is_registered("admin"))
  {
    //If session not registered, redirect to login.php page
    header("location:login.php");
  }
  else
  {
    header( 'Content-Type: text/html; charset=utf-8' );
  }
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>

変数を設定するための別のファイル check_login.php にあるログイン チェック コードは次のとおりです。

    $sql="SELECT * FROM login_admin WHERE user_name='$myusername' and user_pass=SHA1('$mypassword')";
    //echo '<p>'.$sql.'</p>';

    $result=mysqli_query($dbC, $sql);
    //echo '<p>'.$result.'</p>';

    // Mysql_num_row is counting table row
    $count=mysqli_num_rows($result);
    // If result matched $myusername and $mypassword, table row must be 1 row
    if ($count==1)
    {
      // Register $myusername, $mypassword and redirect to file "admin.php"
      session_start();
      $_SESSION['name'] = 'admin';
      $_SESSION['password'] = 'password';
      // session_register("admin");
      // session_register("password");
      // $_myusername= $myusername;
      $_SESSION['name']= $myusername;
      header("location:admin.php");
    }

この問題を解決するのを手伝ってくれる人はいますか?

4

6 に答える 6

0

isset関数を使用して、セッションが設定されているかどうかを確認してください。ヘッダーがすでに送信されているというエラーは、警告が空白と見なされるため、ヘッダー関数が実行されないためです。

于 2013-02-04T12:37:19.090 に答える
0

まず、タイプミスがあります:

define(ADMIN,$_SESSION['name']);

次のようにする必要があります。

define('ADMIN',$_SESSION['name']);

2番:

問題は、実際にブラウザに何かを出力しているという事実から発生します。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>

PHP ファイルの末尾にある静的 HTML が text/html ヘッダーを送信するためです。

すべての HTML コードを .php/.html ファイル内に配置し、代わりにスクリプトの最後に含める必要があります。

3番目に使用する必要があります:

isset($_SESSION['admin'])

それ以外の:

session_is_registered('admin')
于 2013-02-04T12:31:34.110 に答える
0

これは、発生しているエラーが原因で発生する問題です。エラー出力が送信されると取得します。error_reporting を 0 にすると、これは機能するので、エラーを修正します。

ref: PHP で「Headers already sent」エラーを修正する方法

if (!session_is_registered("admin"))への変更if (!isset($_SESSION["admin"]))

于 2013-02-04T12:32:16.963 に答える
0

したがって、非推奨であることに関する警告session_is_registered("admin")は、当然のことながら、関数が非推奨である (実際、PHP 5.4 以降から削除されている) ためです。で変数の存在を確認する必要がありますisset($_SESSION["admin"])

2 つ目は、何らかの理由で、ヘッダーを送信する前に出力が抜け落ちているためです。あなたのコードは、与えられた呼び出しの前に何も送信していないように見えますが、これはリーダーheaderの前の単一の空白文字と同じくらい小さい場合があります。<?phpコードを注意深くチェックして、ファイルが PHP リーダーで始まり、それ以外のものがないことを確認してください。

于 2013-02-04T12:32:50.050 に答える
0

両方のポスターが言っていることは真実ですが、生成されている出力は、実際には session_is_registered を使用したことによる E_DEPRECATED エラーです。

それを他の提案のいずれかに変更すると、問題は発生しません。

また、ヘッダー リダイレクトの直後に必ず「exit」を配置する必要があります。現状では、許可されていないユーザーをリダイレクトしようとした後でも、PHP はそのページ全体を実行します。

于 2013-02-04T12:34:26.050 に答える
-1

最近の編集後は、非推奨の関数を使用せず、代わりに使用する必要がありますisset();

この状況は、呼び出しの前に何らかの出力が発生した場合に発生しsession_startます。

1 つの解決策はob_start();session_start();

于 2013-02-04T12:28:27.063 に答える