Php 会话_status()发出第一个连接

Php 会话_status()发出第一个连接,php,Php,我有一个网站,人们可以创建一个帐户,然后登录到他们的帐户 当我检查登录的输入(电子邮件和密码)时,我使用一个名为control\u login.php的文件。代码如下: // -> some DB calls checking whether the user exists or not... if(isset($user->email) && password_verify($_POST['password_login'],$user -> password)

我有一个网站,人们可以创建一个帐户,然后登录到他们的帐户

当我检查登录的输入(电子邮件和密码)时,我使用一个名为
control\u login.php
的文件。代码如下:

// -> some DB calls checking whether the user exists or not...
if(isset($user->email) && password_verify($_POST['password_login'],$user -> password)){
    session_start();
    $_SESSION['auth'] = $user;
    $user_id = $_SESSION['auth']->id;
    echo "Loading your profile...";
    header("Refresh:2 ; url=http://www.someurl.com/account.php?id=$user_id");
    exit();
} 
else{     
    $errors_login['danger'] = "We couldn't find any account. Please try again";
}
function logged_only(){
    if(session_status() == PHP_SESSION_NONE){ 
        session_start();
    } 
    if(!isset($_SESSION['auth'])){
        echo 'Access denied';
        header('Refresh:2 ; url=http://www.someurl.com');
        exit();
    }
}
如果一切正常,我启动一个会话并重定向到
account.php
。如果没有,我将显示一条错误消息

account.php
文件包含一个名为
logged_only()
的特定函数,该函数在一切正常时启动会话,或者在没有会话时拒绝访问。代码如下:

// -> some DB calls checking whether the user exists or not...
if(isset($user->email) && password_verify($_POST['password_login'],$user -> password)){
    session_start();
    $_SESSION['auth'] = $user;
    $user_id = $_SESSION['auth']->id;
    echo "Loading your profile...";
    header("Refresh:2 ; url=http://www.someurl.com/account.php?id=$user_id");
    exit();
} 
else{     
    $errors_login['danger'] = "We couldn't find any account. Please try again";
}
function logged_only(){
    if(session_status() == PHP_SESSION_NONE){ 
        session_start();
    } 
    if(!isset($_SESSION['auth'])){
        echo 'Access denied';
        header('Refresh:2 ; url=http://www.someurl.com');
        exit();
    }
}
这是我的问题:当地一切正常。在现实生活中(即使用网站url时),使用Internet Explorer时一切正常。 但是,我在使用Chrome或Firefox时遇到以下问题:

  • 我打开浏览器,进入我的网站并首次登录
  • 我从
    control\u login.php
    中得到“加载您的配置文件”,这意味着它找到了用户
  • 当到达
    account.php
    时,我从我的
    logged_only()
    函数中获得以下“访问被拒绝”
  • 我被重定向到主页
  • 我第二次登录
  • 我可以正确连接到我的个人资料:(
  • 只要我不关闭浏览器,登录就不会有任何问题
  • 我有点迷路了…问题出在哪里

    谢谢你的帮助

    注意:目前我根本不使用cookies。

    我发现错误:

    这都是关于URL的

    如果您首先通过键入someurl.com而不是www.someurl.com连接到网站,则由于
    logged_only()
    ,连接失败,然后自动重定向到www.someurl.com

    因此,只有在提交用户信息时出现这些www时,它才不会失败

    因此,对于那些需要的人,以下是将任何非www更改为基于www的url的方法。您只需更新
    htacess
    ,如下所示:

    # Redirect non-www to www:
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
    

    这样,所有的url都将使用这些www

    ,一方面,您在标题上方回音,这被视为在标题之前输出(使用错误报告,您将看到)。现在,一旦浏览器关闭,会话可能会随之结束;缓存问题也会发生。@Fred-ii-谢谢你的评论。当我使用错误报告(E\u ALL)时,什么都不会显示……我在标题后进行了回显,它不会改变任何内容:(你还需要“显示”它们(如果有)-添加
    ini\u集(“显示错误”,1)
    对于您当前的E_ALL。无论用户是否登录,您都应该在每个脚本的顶部启动会话。如果在会话开始之前生成任何输出,您将得到一个错误。@Fred-ii-ok…没有显示错误。。。