会议变得疯狂。只有Mozilla能够处理

时间:2011-10-24 12:38:28

标签: php session browser

问题


我有一个管理员小组。目前只有Mozilla能够处理登录。像Chrome,IE,Opera这样的浏览器甚至不会显示通过会话传递的任何消息,因此除了Mozilla之外,没有人能够登录任何浏览器。

一些信息


  • 我在我的服务器上使用 PHP 5.3.6 ,在我的本地使用 PHP 5.3.5 计算机。
  • 我的代码是面向对象的。
  • ini_set("session.use_only_cookies", 1);ini_set('session.cookie_secure', 1);用于构造方法 我的课程班。
  • 本网站上的SLL

登录过程:首先,我从表单中收集所有信息,验证并收集数据。验证完毕后,如果一切正常,我会将此数据发送到会话类中的登录方法。

public function login ($user) {
        global $siteSettings;
        if ($user) {            
            $this->id          = $_SESSION['id']          = $user->id;
            $this->username    = $_SESSION['username']    = $user->username;
            $this->fullName   = $_SESSION['fullName']   = $user->fullName;
            $this->group_id    = $_SESSION['group_id']    = $user->group_id;
            $this->groupName    = $_SESSION['groupName']      = $user->groupName;
            $this->lastLogin   = $_SESSION['lastLogin']   = $user->lastLogin;
            $this->isAdmin   = $_SESSION['isAdmin']   = ($user->admin == 1) ? true : false;
            $this->isAgent   = $_SESSION['isAgent']   = ($user->agent == 1) ? true : false;
            self::$language   = $_SESSION['language'] = ($user->language != "" || $user->language != NULL) ? $user->language : self::$language;
            if ($user->language != "" || $user->language != NULL) {
                $_SESSION['language'] = $user->language;
            }else {
                if (!defined(DEFAULT_LANGUAGE)) {
                    $browserLang = "|".$_SERVER["HTTP_ACCEPT_LANGUAGE"];
                    $browserLang = getStringBetween($browserLang, "|","-", FALSE);
                    if (!file_exists(LANGUAGES.$browserLang.".php")) $browserLang = FALSE;
                }
                $_SESSION['language'] = ($browserLang) ? $browserLang : DEFAULT_LANGUAGE;
            }


            # When 2 Update session_id
            $date = new DateTime("now");
            $UpdateTime = $siteSettings->session->timeOut * 60;
            $date->add(new DateInterval("PT".$UpdateTime."S"));

            $_SESSION['SIDUpdateTime'] = $date->format("Y-m-d G:i:s");

            # UPDATE LAST LOGIN & ADD SESSION ID
            # Clear Fields
            members::clearFields();
            members::$fields['id'] = $_SESSION['id'];
            members::$fields['lastLogin'] = date("Y.m.d G:i:s");
            members::$fields['lastLoginIP'] = $_SERVER['REMOTE_ADDR'];
            # GET THE SALT
            $saltInfo = members::getData("id", "salt", members::$fields['id']);

            # SETTING SESSION ID ENCRYPTION
            crypt::setKey($saltInfo->salt);
            members::$fields['sessionID'] = crypt::encode(session_id());
            members::$fields['sessionIP'] = $_SERVER['REMOTE_ADDR'];
            members::$fields['sessionAgent'] = $_SERVER['HTTP_USER_AGENT'];
            members::save();

            $this->loggedIn = true;
            var_dump($_SESSION);
        }
    }

当我愚蠢的数据时,我可以看到$ _SESSION得到了一些值。

为了测试它,我停止了脚本,在var_dump($_SESSION);之后(添加了die();)我创建了test.php文件并尝试了这个;

<?php
ob_start();
session_start();

echo '<pre>';
var_dump($_SESSION);
echo '<pre>';

ob_end_flush();
?>

输出为array(0) {}

但是当我尝试使用Mozilla完全相同的东西时,test.php的输出应该是它的方式(在我的会话类中与登录方法的结果相匹配)。

  • 我从我的本地电脑试过,但我没有遇到同样的情况 问题。
  • 我从页面中禁用了所有java脚本和jquery代码 在我的脑海里没有“可能”。
  • 转储数据后,脚本停止。这就是为什么$_SESSION变量不应该改变的原因。出于某种原因,当它在服务器上时, Mozilla 能够显示预期结果,而其他浏览器显示NULL

此时我真的不知道该怎么想这个问题来试图解决它。我能想到的是,这个问题可能与服务器配置有关。但是,PHP是服务器端编程。 PHP不应该为Jquery,CSS,HTML ......等浏览器显示不同的行为。

对不起,我无法提供管理面板链接。考虑到这是一个活跃的管理面板。如果有必要,我可以将它安装在另一个域上让你试试,但我相信我上面提供的信息解释了一切。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

我遇到了类似的问题......只需启用cookie ..这样在登录后,将执行设置会话的代码并设置会话。可能是会议无法设置......

还要检查此http://php.net/manual/en/function.session-cache-limiter.php

答案 1 :(得分:0)

如果大件不起作用,请将其修剪下来,测试&amp;调试,并从那里建立起来。

这有用吗? (运行两次)。

<?php

session_start();

echo "Session ID: " . session_id() . "<br/>\n";

if (!isset($_SESSION['test']))
{
    $_SESSION['test'] = "foobar";
    echo "Setting session variable: ";
    echo $_SESSION['test'];
}
else
{
    echo "Restoring session variable: ";
    echo $_SESSION['test'];
}

如果这适用于所有浏览器,那么它与您的代码有关。例如,空会话可能与无法编写的cookie有关。同时将错误报告设置为E_ALL | E_STRICT,所以你会看到一切都出错了。

答案 2 :(得分:0)

事实证明,Mozilla FireFox能够处理一些数据,但我尝试过的其他浏览器却没有,因此它们会在每次加载页面时重置整个会话。

我的本​​地计算机没有问题,但在服务器上我遇到了会话问题。我不知道为什么session_set_cookie_params();setcookie();无法在服务器上运行,所以我不得不编写更长版本的代码;

private static function sessionLifeTime() {
global $siteSettings;
# HOW LONG WE WANT SESSIONS
$lifeTime = intval($siteSettings->session->timeOut) * 60;

if (isset($_SESSION['id']) && isset($_SESSION['lastActivity']) && (time() - $_SESSION['lastActivity'] > $lifeTime) ) {
// SEND INFORMATION TO USER
self::logout();
}
$_SESSION['lastActivity'] = time();
}

用上面的代码替换我的方法解决了这个问题。

感谢大家的时间,关注和兴趣。