Php 会话变量在IE和Safari中工作,但不在Chrome、Opera或Firefox中工作?

Php 会话变量在IE和Safari中工作,但不在Chrome、Opera或Firefox中工作?,php,Php,我正在从登录页面设置会话变量($\u session['login'])。我已经进行了彻底的测试,变量肯定正在创建,并且存储了正确的值($\u SESSION['login']='1'),但是使用Chrome、Opera或Firefox在下一页中无法识别变量-奇怪的是,相同的脚本与我在Safari和Internet Explorer中预期的一样工作 任何帮助都将不胜感激——我一直在努力解决这个问题,但就是找不到它——我在这里完全不知所措 这是一步一步的计划- <?php // log in

我正在从登录页面设置会话变量($\u session['login'])。我已经进行了彻底的测试,变量肯定正在创建,并且存储了正确的值($\u SESSION['login']='1'),但是使用Chrome、Opera或Firefox在下一页中无法识别变量-奇怪的是,相同的脚本与我在Safari和Internet Explorer中预期的一样工作

任何帮助都将不胜感激——我一直在努力解决这个问题,但就是找不到它——我在这里完全不知所措

这是一步一步的计划-

<?php
// log in page
// if logged in successfully set the session variable

session_start();

if (// log in credentials good) {
    $_SESSION['login'] = '1';
    header('location:inside_page.php');

    // echo $_SESSION['login'] ;
    // ----------------------
    // commenting out the redirect and echoing
    // the session variable works as expected
    // in IE, Safari, Chrome, Opera and Firefox
}

?>

这是我的Check_login类——它将在下一页(在_page.php内)中实例化-

类别:

<?php

if (! defined('EXT')){ exit('Invalid file request'); }

class Check_login { 
    private $login = null ;

    function __construct() {
        session_start();
        $this->login = $_SESSION['login'];
        if ($this->login != '1') {
            header('location:../index.php');
        }

        // $login = $this->login ;
        // echo $login ;
        // $session = $_SESSION['login'];
        // echo $session ;
        // ----------------------
        // commenting out the redirect and echoing the
        // session variable shows 1 in IE and Safari, but
        // empty in Chrome, Opera and Firefox
    }

}

?>

页面(在_page.php内):


再说一次,任何帮助都会非常棒。谢谢

session\u start()
移到inside\u page.php中require语句上方


会话应该在脚本开始时启动,并且几乎总是在包含之前启动。

我发现了这一点-我不能说我理解为什么会出现这种情况,但这就是解决我问题的方法。在我的登录页面中,在验证登录凭据后,我将会话变量“login”设置为1,然后显式重定向到另一个页面。经过测试,我意识到使用相对URL重定向解决了这个问题

我的原始帖子甚至没有说明URL,因为我认为这是不必要的,但问题就出在这里-

<?php
// log in page
// if logged in successfully set the session variable

session_start();

if (// log in credentials good) {
    $_SESSION['login'] = '1';
    header('location:https://www.somedomain.com/inside_page.php'); // *** PROBLEM
}

?>

通过相对地设置位置,我的问题消失了-

<?php
// log in page
// if logged in successfully set the session variable

session_start();

if (// log in credentials good) {
    $_SESSION['login'] = '1';
    header('location:inside_page.php'); // *** FIX
}

?>

我仔细检查了一下,安全连接肯定不是问题,而是显式URL

使用相对位置,我的会话变量将显示在Internet Explorer、Safari、Chrome、Opera和Firefox的下一页中。使用一个明确的位置,它出现在IE和Safari中,但没有出现在CHROME、OPERA和FIREFOX中

你可以很容易地重新创建它,并亲自尝试-

<?php

// ------- page_one.php -------

session_start();

$_SESSION['val'] = '1';

header("location:http://www.somedomain.com/page_two.php") ;
// header("location:page_two.php") ;

?>

<?php

// ------- page_two.php -------

session_start();

if ($_SESSION['login'] != '1') {
    echo 'false' ;
} else {
    echo 'true' ;
}

?>


希望这能为其他人节省一些时间(和头痛)。

我在尝试将digitalaccesspass(DAP)集成到PHP5.5服务器上时遇到了类似的问题(打破了所有Webkit/Blink浏览器,因此打破了Chrome、Safari和Opera的登录),这些变化对我有帮助

  • 我确保验证器中的第一行是
    session\u start()
  • 在所有重定向(
    header(“Location:”)
    calls)之前,我添加了
    session\u write\u close()
  • 重定向被编辑为相对路径,而不是绝对路径

对于那些通过谷歌遇到这个问题的人来说,如果你用DAP来解决这个问题,那么在/DAP/authenticate.php中进行这些更改,我的php会话在Chrome中也不起作用

我发现,尽管每个页面仅使用
session\u start()
初始化每个会话,但PHPSESSID cookie路径并未在我的页面之间同步

session\u start()
上方的这一行添加到我向会话写入数据的页面,解决了以下问题:

session_set_cookie_params(600, '/');
见:


@canoebrain你在用饼干吗?这是你目前的全部脚本吗?不,我还没有发布我的全部脚本,我实际上调用了一些类并做了其他事情,但我已经将其归结为问题产生的确切位置。如果我创建了一个页面,将会话变量设置为1,然后重定向到下一个页面,在那里我调用我的类(这正是我正在使用的类),我遇到了这个问题。我想这可能是Chrome中的一些设置,但在Opera和Firefox中也会发生。。。哦,我一点也不吃饼干。抓挠贝兹-我真是个白痴-如果我完全隔离这些东西,同样的事情就不会发生,那一定是我在另一门课上做的事情。我会再做一遍,试着自己再修一次。谢谢你抽出时间,贝兹,我真的很感激。
session_set_cookie_params(600, '/');