3

解决方案:经过几个小时的搜索,当我在没有添加“www”的情况下访问我的网站时,似乎出现了这个问题。在域之前。所以实际发生的事情是,我正在使用 example.com/login.php 在某处设置会话,我的成员控件无法识别,所以它将我重定向回 www.example.com/login.php,当我登录一切正常。

当我从 www.example.com/login.php (带有 www.)登录时,它会从第一次尝试正确登录。

所以我添加了一个代码来确保我总是在 URL 中有 www:

if ($_SERVER['HTTP_HOST'] == "example.com")
{
   $url = "http://www." . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
   header("Location: $url");
} 

现在一切正常。希望它可以帮助某人。


所以,我已经建立了 3 个以上的网站,并且都有同样的问题,我不知道为什么,我必须登录两次,直到我真正登录......(直到设置会话变量)。非常感谢您的帮助,长期以来一直在尝试解决此问题并寻找解决方案...

    session_start();
if ((isset($_SESSION['UserName']))&&(isset($_SESSION['LastActivity'])))
{
   header ('Location: http://www.example.com/Account.php');
}

if (isset($_POST['username']))
{
    mysql_connect("localhost","DBuser","pass") or 
    die ("could not connect to mysql");
    mysql_select_db("DBNAME") or die ("no database");

    $inputUserName = $_POST['username'];
    $inputPass = $_POST['password'];

    $datausername = mysql_real_escape_string($inputUserName);
    $password=md5($inputPass);

    $sqlCommand = "SELECT * FROM Members 
    WHERE UserName='$datausername' AND 
    Password='$password'";

    $result = mysql_query($sqlCommand);


    if (mysql_num_rows($result) > 0)
    {
       $_SESSION['UserName'] = $datausername;

       $_SESSION['LastActivity']= time();
       sleep(2);
       $LoginDate = date('Y-m-d H:i:s');

       mysql_connect("localhost","DBUPDATEusername","DBuserPass") or 
    die ("could not connect to mysql");
    mysql_select_db("databaseName") or die ("no database");   

       mysql_query("Update Members SET LastLogin='$LoginDate' WHERE 
            UserName='$datausername'");

       mysql_close(); 
       echo '<meta http-equiv="Refresh" content="0;url=http://www.example.com/Account.php?p=Login_Success"/>';
    }
    else {
        mysql_close();
        echo '<div id="error_msg">Error: Information entered are not correct. Please check and try again.</div>';}
    }

}
?>
<form...

登录表单(带有 action="")和方法 post)。

注意:我使用 html 刷新标签,因为我不能使用标头重定向..(我收到标头已发送的错误)。

在 example.com/Account.php 中,我在代码顶部执行此检查:

  session_start();
if ((!isset($_SESSION['UserName']))||(!isset($_SESSION['LastActivity'])))
{
    header('Location: http://www.example.com/?p=Must_Login');
}

而且似乎我第一次登录并被重定向到 account.php 面板.. 会话值未设置,并将我重定向回 Must_Login 页面。我再次登录(与我第一次使用的登录页面相同。但第二次登录时,它确实设置了会话值,一切正常。

非常感谢您提前提供的帮助!

4

7 回答 7

7

解决方案:经过几个小时的搜索,当我在没有添加“www”的情况下访问我的网站时,似乎出现了这个问题。在域之前。所以实际发生的事情是,我正在使用 mydomain.com/login.php 登录,在某处设置会话,我的成员控件无法识别,所以它将我重定向回 www.mydomain.com/login.php,当我登录一切正常。

当我从 www.mydomain.com/login.php (带有 www.)登录时,它会从第一次尝试正确登录。

所以我添加了一个代码来确保我总是在 URL 中有 www:

if ($_SERVER['HTTP_HOST'] == "mydomain.com")
{
   $url = "http://www." . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
   header("Location: $url");
} 

现在一切正常。希望它可以帮助某人。

于 2013-12-20T17:51:57.537 回答
0

PHP sessions are written to the session handler after the script which started the session finishes execution. In your case the first script started the session and updated session variables 'username' and 'lastactivity' then redirected to another page. But still the session values are in memory - not registered to be used in the second script.

One way to fix the problem is to call

session_write_close();

before (or after) sleep(2);

for more information see here

于 2013-06-06T12:02:13.927 回答
0

检查登录后尝试输入以下代码?

session_start();

if ((!isset($_SESSION['UserName']))||(!isset($_SESSION['LastActivity'])))
{
    header('Location: http://www.mysite.com/?p=Must_Login');
}
于 2013-06-06T11:40:17.043 回答
0

如果会话尚未开始,则开始会话。连接到服务器并在查询之前选择数据库。

if (!isset($_SESSION)) {
      session_start();
}

mysql_connect("localhost","DBusername","DBuserPass") or 
    die ("could not connect to mysql");
mysql_select_db("databaseName") or 
    die ("no database");  

if ((isset($_SESSION['UserName']))&&(isset($_SESSION['LastActivity'])))
       header ('Location: http://www.mysite.com/Account.php');

if (isset($_POST['username']))
{

    $username = mysql_real_escape_string($_POST['username']);
    $password = md5($_POST['password']);

    $sqlCommand = sprintf( "SELECT * FROM Members 
    WHERE UserName = %s AND Password = %s", mysql_real_escape_string( $_POST['username'] ), md5( $_POST['password'] ) );

    $result = mysql_query( $sqlCommand );

    $rowsnr = mysql_num_rows( $result );

    if (mysql_num_rows( $result ) > 0)
    {
       $_SESSION['UserName'] = mysql_real_escape_string( $_POST['username'] );

       $_SESSION['LastActivity']= time();
       sleep(2);      

       mysql_query(sprintf("UPDATE Members SET LastLogin = NOW() WHERE 
            UserName = %s", mysql_real_escape_string( $_POST['username'] )));

       mysql_close(); 

       echo '<meta http-equiv="Refresh" content="0;url=http://www.mysite.com/Account.php?p=Login_Success"/>';
    }
    else 
    {
        mysql_close();
        echo '<div id="error_msg">Error: Information entered are not correct. Please check and try again.</div>';
    }
}
?>
于 2013-06-06T11:26:29.190 回答
0

在您的成员选择之前连接到数据库。

于 2013-06-06T11:24:01.793 回答
0

session_set_cookie_params(0, '/', '.domain.com')在你的 session_start() 之前尝试;

于 2014-08-11T13:53:21.003 回答
0

我遇到了完全相同的问题,在我的情况下,我在登录后重定向到网站地址:

header('Location: http://mywebsite.com');
die();

即使在重定向之前手动关闭会话也无济于事。

我通过重定向到特定页面来修复它:

header('Location: index.php');
die();
于 2015-09-15T21:01:45.037 回答