session_status()发出第一个连接

时间:2015-11-19 13:03:57

标签: php

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

当我检查登录的输入(电子邮件和密码)时,我使用名为control_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";
}

如果一切正常,我会开始一个会话并重定向到account.php。如果没有,我会显示一条错误消息。

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

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();
    }
}

这是我的问题:一切都在本地工作正常。在现实生活中(即使用网站网址时),使用Internet Explorer时一切正常。 但是,使用Chrome或Firefox时出现以下问题:

  1. 我打开浏览器,访问我的网站并首次登录
  2. 我从control_login.php获取“加载您的个人资料”,意味着它找到了用户
  3. 到达account.php后,我的logged_only()功能会收到以下“拒绝访问”。
  4. 我被重定向到主页
  5. 我第二次登录
  6. 我可以正确连接到我的个人资料:( ...
  7. 只要我不关闭浏览器,登录就不会有任何问题。
  8. 我有点迷失......问题出在哪里?

    感谢您的帮助!

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

1 个答案:

答案 0 :(得分:0)

我发现了错误:

关于网址的全部内容。

如果您首先通过输入someurl.com而非 www .someurl.com连接到网站,则表示失败,然后自动重定向到 www .someurl.com由于def StartProcess(): strings = [x.Text_Var.get() for x in entries] print " ".join(strings)

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

因此,对于那些需要它的人来说,这是将任何非www更改为基于www的网址的方法。您只需更新logged_only(),如下所示:

htacess

这样,所有网址都将使用这些 www