问题
我有一个管理员小组。目前只有Mozilla能够处理登录。像Chrome,IE,Opera这样的浏览器甚至不会显示通过会话传递的任何消息,因此除了Mozilla之外,没有人能够登录任何浏览器。
一些信息
ini_set("session.use_only_cookies", 1);
和
ini_set('session.cookie_secure', 1);
用于构造方法
我的课程班。登录过程:首先,我从表单中收集所有信息,验证并收集数据。验证完毕后,如果一切正常,我会将此数据发送到会话类中的登录方法。
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的输出应该是它的方式(在我的会话类中与登录方法的结果相匹配)。
$_SESSION
变量不应该改变的原因。出于某种原因,当它在服务器上时, Mozilla 能够显示预期结果,而其他浏览器显示NULL
。此时我真的不知道该怎么想这个问题来试图解决它。我能想到的是,这个问题可能与服务器配置有关。但是,PHP是服务器端编程。 PHP不应该为Jquery,CSS,HTML ......等浏览器显示不同的行为。
对不起,我无法提供管理面板链接。考虑到这是一个活跃的管理面板。如果有必要,我可以将它安装在另一个域上让你试试,但我相信我上面提供的信息解释了一切。
提前感谢您的帮助。
答案 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();
}
用上面的代码替换我的方法解决了这个问题。
感谢大家的时间,关注和兴趣。