0

我正在使用 PHP 处理这个网页。我正在使用 easyphp 版本进行本地测试:5.3.9 我做了一个通常的登录,注销功能。当我在本地测试时,按预期工作。但是当我通过 FTP 将它上传到 Godaddy 托管服务时,它开始做一些奇怪的事情。

  • 会话变量无法正常工作,有时会起作用,有时会不起作用!db 上的登录连接和验证工作正常!但是在从另一个失败的文件中读取 SESSION 变量时。

会是什么呢?php版本?但我只是使用简单的 $_SESSION['name'] 变量。漏洞?请帮忙!

这是我已经尝试过的:

  • 使用其他浏览器。
  • 重新上传源(多次)
  • 清除缓存、cookies等。
  • 逐步测试,但就像我说的那样,它可以很好地在本地托管网页。

最后一件可能很重要的事情是数据库托管在服务器上(这不是我的本地 pc ofc),并且与该数据库的连接在这两种情况下都可以正常工作。

这是我的代码:

login.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>

豆.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>");
  }

}

主页.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>

签出.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 回答