Php 首次尝试登录时未识别会话

Php 首次尝试登录时未识别会话,php,google-chrome,session,safari,Php,Google Chrome,Session,Safari,问题已解决-请参阅: -- 我在(至少)谷歌浏览器和Safari中遇到了一个问题 第一次尝试登录时,用户不会被重定向。会话已创建,但几乎没有被检测到,并将用户带回索引页。在第二次尝试时,将发出正确的重定向,并将用户带到正确的页面 该脚本在Firefox中运行良好,我已经仔细检查了返回的数据是否正确。我搜索了,我搜索了,我搜索了,但不幸的是,没有发现任何有用的东西 Access.php-用户登录 <?php session_start(); ob_start(); include_onc

问题已解决-请参阅:

--

我在(至少)谷歌浏览器和Safari中遇到了一个问题

第一次尝试登录时,用户不会被重定向。会话已创建,但几乎没有被检测到,并将用户带回索引页。在第二次尝试时,将发出正确的重定向,并将用户带到正确的页面

该脚本在Firefox中运行良好,我已经仔细检查了返回的数据是否正确。我搜索了,我搜索了,我搜索了,但不幸的是,没有发现任何有用的东西

Access.php-用户登录

<?php
session_start();
ob_start();


include_once('db.class.php');
include_once('register.class.php');
include_once('login.class.php');


$db = null;
$reg = null;
$log = null;


$db = new Database();
$log = new Login($db, null, null, null, null, null, null);


if (isset($_SESSION['login'])) {    
    $log->redirectUser($_SESSION['login']);
}


include_once('includes/header.html');

?>

Some HTML...

<?php
    if (isset($_POST['logsub'])) {
        $db = new Database();
        $log = new Login($db, $_POST['email'], $_POST['pass']);

        $validation = &$log->validate();

        if(empty($validation)) {
            $log->redirectUser($_SESSION['login']);
        } else {
            echo "<div id='error'><div class='box-error'><p style='font-weight: bold'>The following errors occured...</p><ul>";

                for ($i = 0; $i < count($validation); $i++) {
                    echo "<li>" . $log->getErrorMessage($validation[$i]) . "</li>";
                }
            echo "</ul></div></div>";
        }
    }
?>
这里有一个网站链接:fbedder/->我已经用凭证->电子邮件:test@/密码:test123321设置了一个测试帐户

重申一下,这个问题只存在于Google Chrome和Safari(Safari在我的iPhone上)中,完全存在于登录方面。第一次尝试时,会话将被忽略(已创建),第二次尝试时,用户将被重定向

有什么想法吗?我试过很多种可能性

--编辑--

我知道问题在哪里了

调用重定向时,它会将用户发送到details.php页面。但是,此页面包含以下代码片段:

if (!isset($_SESSION['login'])) {
    header("Location: fbedder/index.php");
}

显然,正在发生的事情是,会话没有被检测/保存/“whatevered”,结果是将用户发送回索引页。是否有办法确保$\u会话不会有效丢失。在这里发布之前,我已经读过这方面的内容,这也是为什么我插入了
session\u write\u close()
函数,并遇到以下注释:

我的会话搞砸了,因为我同时有两个不同的会话ID:

  • 1个用于domain.com的PHPSESSID cookie
  • 1个用于www.domain.com的PHPSESSID cookie
这修正了它:

//在每一页的开头

会话设置cookie参数(1800,“/”,“domain.com”); 会话_start()

资料来源:


设置参数解决了问题。

注意:HTML代码之后不能发送标题。例如,在回显/打印/拥有一些HTML后,您无法发送
标题(“位置:xxx”)
。看起来你可能有这个。查看第二个
组中的Access.php也许可以查看
重定向用户
上的
if
块的
else
语句。与其说是会话相关,不如说是
checkRegistration
没有返回预期值?换句话说,
redirectUser
的结尾永远都不应该出现,对吗?好的,但这两种方法都不能解释与特定浏览器相关的问题。你确定这不会发生在其他浏览器中吗?红鲱鱼还是伟大的线索…?@邪恶的流浪者在我脑海中闪过,但它在第二次尝试中起作用的事实让我把这个问题划掉了。无论如何,我还是要玩一玩。@ficuscr我在日志文件中添加了几个变量,一切都如预期的那样,并且发出了正确的语句,只是没有发出。它在Firefox(版本18.0.1)上运行得非常好,但至少在Google Chrome(版本24.0.1312.57 m)和Safari(iPhone版本)上没有。令人头痛的是,在这些浏览器中,它在第二次尝试时仍然有效。这就好像会话丢失了一样
if (!isset($_SESSION['login'])) {
    header("Location: fbedder/index.php");
}