2

セッションを介してユーザー変数を渡しています。ローカルホストでは問題なく動作しますが、Web サーバーでは奇妙な動作をします。

ログイン後、セッション変数は正常に機能します...約 3 ページをクリックすると、突然 POOF になります。

Welcome, jordan.「 」ではなく「 」に注目してください。これWelcome, .も左上隅にあります。

セッション機能: http://imageshack.us/photo/my-images/32/loggedins.png/

セッション POOF! http://imageshack.us/photo/my-images/515/loggedinno.png/

ログイン/セッション変数コードの作成:

<?php
        if (!isset($_SESSION['user']))
        {
        if (isset($_POST['user']))
        {
        $user = sanitizeString($_POST['user']);
        $pass = sanitizeString($_POST['pass']);
        if (preg_match($txtMatch,$user))
        {
        if ($user == "" || $pass == "")
        {
        $error = "Please enter all required fields";
        }
        else
        {
        $query = "SELECT * FROM gtmembers WHERE user='$user'";
        $result = queryMysql($query);
        $rank = mysql_result($result, 0, 'rank');
        if (!mysql_num_rows($result))
        {
        $error = "Username does not exist.";
        }
        else
        {
        $getPass = mysql_result($result, 0, 'pass');
        $salt = substr($getPass, 0, 64);
        $hash = $salt . $pass;
        for ($i = 0; $i < 100000; $i++) 
        {
        $hash = hash('sha256', $hash);
        }
        $hash = $salt . $hash;
        if ($hash == $getPass)
        {
        if ($rank != "Banned")
        {
        $userLow = strtolower($user);
        $_SESSION['user'] = $userLow;
        $_SESSION['rank'] = $rank;
        echo <<<_END
        <script type="text/javascript">
        window.location.href='index.php';
        </script>
        _END;
        echo "Successfully logged in. Click <a href='index.php'>here</a> to continue.";
        }

ヘッダー コード:

        <?php //gtheader.php
        session_start();
        include_once 'gtfunctions.php';
        $loggedIn = FALSE;

        if (isset($_SESSION['user']))
        {
        $user = $_SESSION['user'];
        if ($user) echo "Current User: $user<br />";
        else echo "Current User: None<br />";
        $rank = $_SESSION['rank'];
        $loggedIn = TRUE;
        echo "is set SESSION['user']? Yes";
        }
        else echo "is set SESSION['user']? No";

        echo "<div id='header'><a class='header' href='index.php'> <h1 id='headerTitle'>$appname</h1></a>";
        if ($loggedIn == TRUE)
        {
        $query = "SELECT * FROM gtmessages WHERE recip='$user' AND status='0'";
        $result = queryMysql($query);
        if (mysql_num_rows($result) == 0) $num = "";
        else $num = "[".mysql_num_rows($result)."]";
        if ($rank == 'Owner' || $rank == 'Admin')
        {
        echo "Welcome, <a class='header' href='gtmembers.php?view=$user'>$user</a><a     class='header' href='gtmessage.php'>$num</a>. [<a class='header'     href='gtlogout.php'>Logout</a>] | <a class='header' href='gtadmin.php'>Admin</a><br />";
        }
        else
        {
        echo "Welcome, <a class='header' href='gtmembers.php?view=$user'>$user</a><a     class='header' href='gtmessage.php'>$num</a>. [<a class='header'     href='gtlogout.php'>Logout</a>]<br />";
        }
        }
?>
4

3 に答える 3

1

一方の環境で機能し、もう一方の環境では機能しない場合は、PHP.iniがsession.auto_start = 1機能する環境にあると思います。ベストプラクティスは、常にページの上部に電話をかけ、正しく設定されていることにsession_start()依存しないことです。php.iniこれにより、どのような環境でも機能するはずです。

于 2013-03-22T04:43:41.723 に答える
1

解決しました。

ここでの問題は、Host Gator がグローバル変数を登録することです。$user を使っているので、$_SESSION['user'] が登録されるので、上書きされてしまいます。

すべてのファイルの $_SESSION['user'] を $_SESSION['myUser'] に変更して問題を修正しました

助けてくれてありがとう。

于 2013-04-01T01:56:37.910 に答える
0

session_start()ページの上部に電話する必要があります

gtheader.php

<?php
    session_start();
    include_once 'gtfunctions.php';
    $loggedIn = FALSE;
    .....
于 2013-03-22T04:56:15.647 に答える