1

重複の可能性:
データのソースとしてグローバル変数を使用した PHP セッションの副作用の警告

使用しているログイン スクリプトに問題があります。問題は、セッションが登録されていないログイン後の一部のホスティング プロバイダーにあります。PHPエラーログで、このエラーを確認できます

PHP 警告: 不明: あなたのスクリプトは、PHP 4.2.3 まで存在していたセッションの副作用に依存している可能性があります。register_globals が有効になっていない限り、セッション拡張機能はグローバル変数をデータのソースと見なさないことに注意してください。行 0 の不明で、それぞれ session.bug_compat_42 または session.bug_compat_warn をオフに設定することにより、この機能とこの警告を無効にすることができます。

しかし、bluehost や hostmonster などのほとんどのホスティングでは、エラーなく正常に動作します。誰かが私がここで間違っていることを指摘できますか? よろしくお願いします。

コード:

<?
session_start();
ob_start();
?>

        <?php
        $err=isset($_GET['error'])?$_GET['error']:""; 
        if($err=='error'){?>
        <div class="errormsgbox">Wrong Username or Password. Please try again.</div>    
        <?php }

        if(!isset($_SESSION['adminuser'])){
        if($_SERVER["REQUEST_METHOD"] == "POST")
        {
        // username and password sent from Form
        $adminuser=mysql_real_escape_string($_POST['adminuser']); 
        $adminpassword=mysql_real_escape_string($_POST['adminpassword']); 
        $gpassword=md5($adminpassword); // Encrypted Password
        $sql="SELECT id FROM admin WHERE adminuser='$adminuser' and adminpassword='$gpassword'";
        $result=mysql_query($sql);
        $count=mysql_num_rows($result);

        // If result matched $username and $password, table row must be 1 row
        if($count==1)
        {

        session_register("adminuser");

        header("location:index.php");
        }
        else
        {
        header("location:login.php?error=error");

        }
        }
        ob_end_flush();

        ?>
    <form action="login.php" method="post">
    <div class="login_input">
    <label class="loginlbl"  for="adminuser">UserName :</label>
    <input type="text" name="adminuser"/>
    </div>
    <div class="login_input">
    <label class="loginlbl"  for="adminpassword">Password :</label>
    <input type="password" name="adminpassword"/>
    </div>
    <div class="login_submit">
    <input type="submit" id="submit" value=" Login to Admin Contol Panel"/>
    </div>
    </form>
    <?php }else{
    header("location:index.php");
    }
    ?>
4

5 に答える 5

3

置き換え<?てみてください<?php- ホスティングが無効になっている、いわゆるショートタグである可能性があるため、その部分は実行されません。短いタグを使わないのは基本的に良い習慣です

編集

これを追加することで、この警告を無効にすることができます:

ini_set('session.bug_compat_warn', 0);
ini_set('session.bug_compat_42', 0);

または、同じ名前のスクリプト変数とセッション キーを使用しないようにコードを修正します。つまり、次の警告がトリガーされます。

$_SESSION['foo'] = false;
$foo = 0;

PHP4時代からの遺産...

于 2012-11-22T15:55:22.567 に答える
3

PHP:SESSION_REGISTERにあるように、の使用session_registerは非推奨です。

以下を使用する必要があります。

//session_register("adminuser"); //deprecated
$_SESSION["adminuser"] = $adminuser;
于 2012-11-22T15:59:47.510 に答える
3

のマニュアルsession_register:

この関数は PHP 5.3.0 で非推奨となり、PHP 5.4.0 で削除されました。

$_SESSION['adminuser']代わりに他の変数を使用するのと同じように使用してください。

于 2012-11-22T16:00:04.880 に答える
0

答えではありませんが、コメントに収まらない警告:

パスワード処理を逆方向に行っています。あなたは逃げています、それからmd5-ing。これは正しくありません。簡単なパスワードを考えてみましょう:

o'brien

にエスケープされます

o\'brien

そしてmd5'd。そのバックスラッシュはハッシュ値の一部になります:

o'brien -> 255740509ca6c0e7d86c88fc4d8ddf9d
o\'brien -> afd5c6601a6df7e48d0ce5584b10bf12

ハッシュ値がまったく異なることに注意してください。ハッシュされた値を他の場所で比較していて、エスケープ段階を忘れていると、これは好転して噛み付く可能性があります。

于 2012-11-22T16:00:16.747 に答える