0

PHPを使用してこのWebページに取り組んでいます。easyphp バージョン 5.3.9 を使用してローカルでテストしています。通常のサインイン、サインアウト機能を実行しました。ローカルでテストすると、期待どおりに動作します。しかし、FTP 経由で Godaddy ホスティング サービスにアップロードすると、おかしなことをし始めます。

  • セッション変数が正しく機能していません。機能する場合と機能しない場合があります。db でのサインイン接続と検証は正常に機能しています。しかし、失敗する別のファイルからSESSION変数を読み取るときです。

どうなり得るか?phpのバージョン?しかし、単純な $_SESSION['name'] 変数を使用しているだけです。バグ?助けてください!

これは私がすでに試したことです:

  • 他のブラウザの使用。
  • ソースを再アップロードする (何度も)
  • キャッシュ、Cookie などの消去
  • 段階的にテストしていますが、私が言ったように、Webページをローカルでホストしても問題なく動作します。

重要かもしれない最後の 1 つのことは、db がサーバー (私のローカル pc ではありません) でホストされていることです。この db への接続は、両方のシナリオで正常に動作しています。

これは私のコードです:

Landing.php (xD について知りたい場合):

<div class="xxx">Log in</div>
    <div class="xxx">
        <form class="xxxx" method="post" action="Bean.php">
            <input type="hidden" value="login" name="oper">
            <input type="text" placeholder="E-mail" name="mail"/>
            <input type="password" placeholder="Password" name="pass"/>
            <input type="submit" value="LOG IN!" />
        </form>
    </div>

Bean.php

if (!isset ($_COOKIE[ini_get('name')])) {
session_set_cookie_params(0, '/');
session_name('name');
session_start();
}
if($oper=="login")
{
$user=$cws->VerifyUser($_POST['mail'],$_POST['pass']);//$cws is a class that connects to the server with the db via WS
if(strlen($user->body->mail)>5)//this is because if the user is not found it returns blank or '@.'
{
    $_SESSION['session_mail']=$user->body->mail;
    $_SESSION['session_name']=$user->body->name;
    $_SESSION['session_miniPicture']=$user->body->miniPicture;
    $_SESSION['session_on']=true;
    //This are the variables I can't read later!

    echo("<script type=\"text/javascript\" >                                             location.replace(\"../home.php\");
                                </script>");
}
else{
    echo("<script type=\"text/javascript\" >
                                    alert(\"E-mail or password incorrect \");                                   location.replace(\"../landing.php\");
                                </script>");
  }

}

home.php:

if (!isset ($_COOKIE[ini_get('name')])) {
session_set_cookie_params(0, '/');
session_name('name');
session_start();
}
//In this check, the variable $_SESSION['session_on'] is NOT set! WHY???
if(!isset($_SESSION['session_on']) || $_SESSION['session_on']==false)
{
   echo("<script type=\"text/javascript\" >
                                        location.replace(\"landing.php\");
                                        </script>");

}
echo ( "mail: ".$_SESSION['session_mail']."<br/>"); // for debug
echo ( "name: ".$_SESSION['session_name']."<br/>"); // for debug
echo ( "on: ".$_SESSION['session_on']."<br/>"); // for debug

 Welcome <?php echo $_SESSION['session_name']; ?> &nbsp;- <a href="signout.php">Sign out</a>

signout.php:

if (!isset ($_COOKIE[ini_get('name')])) {
session_set_cookie_params(0, '/');
session_name('name');
session_start();
}

if(isset($_SESSION['session_on']) && $_SESSION['session_on']==true)
{
  $_SESSION['session_on']=false;
  echo("<script type=\"text/javascript\" >

                                       location.replace(\"landing.php\");
                                    </script>");

}

助けてください!Godaddy サポートに連絡する必要がありますか? これはphpのバージョンに関連していますか?どうなり得るか?ありがとうございました

アレハンドロ・カサス

4

1 に答える 1

1

わかりました-問題は次のとおりです。

セッション Cookie がない場合にのみ、セッションを開始しています。ただし、ログアウトしても、セッションと Cookie は破棄されません。状況はこうです。File1.php のセッションで何かを書き、それを File2.php で読みたいとします。しかし、File2.php では、セッション Cookie があるため、セッションが開始されることはありません。どのファイルでもセッションを開始する必要があるため、コードから $_COOKIE 条件を削除してください。

session_set_cookie_params(0, '/');
session_name('name');
session_start();
于 2013-03-06T00:49:37.757 に答える