我的 $_SESSION 值未设置时遇到问题。这一切都始于我的主人说我必须在我的应用程序的根目录中放置一个 PHP.INI 文件。我创建了以下 PHP.ini 文件并将其放在我的 Web 服务器的根目录 (/public_html) 中:
PHP.INI
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off
display_errors = off
display_startup_errors = off
当我没有这个 PHP.INI 时,我的网站可以正常工作。当用户登录时,我的会话变量会保持不变,直到我使用注销功能将它们关闭。我设置了一个变量 $_SESSION['user_id'] 来确定是否有人登录。
但是在我的 public_html 目录中放置 PHP.INI 后,我的会话开始分崩离析。**
奇怪的是,它只发生在我进行 AJAX 调用时。我正在使用 jQuery 进行 ajax 调用并向其发布值。
我尝试了许多不同的方法来尝试让它与 PHP.INI 一起工作,但遗憾的是,这一切导致我只需要允许错误报告和魔术引号......这两者都应该在生产环境中禁用!!
我几乎可以肯定这不是我的代码......如何关闭错误或关闭魔术引号导致我的 $_SESSION 值变为空?
我只$_SESSION['user_id']
在我的代码中设置了我的变量一次,并且我尝试删除所有提及取消设置 $_SESSION、将其设置为 array() 或破坏我的会话的内容。
会话保持不变,因为 session_id() 保持不变,并且我有一段代码可以确认该值已设置。
我正在启动所有页面,包括以相同方式通过 AJAX 调用的页面,如下所示:
<?php
//
// This file returns data for quiz activity on yourquiz.php
//
define ('FILE_MAKE_QUIZ_ACCEPT', true);
$file_path = "../../";
$link_path = "./";
require_once ($file_path . 'func/base_classes.php');
require_once ($file_path . 'func.php');
// Must be logged in to return data back
Session::MustBeLoggedIn(false);
只有当我删除对它的引用时func.php
,它才会在不取消设置所有 $_SESSION 变量的情况下加载。
这是我的 func.php 代码:
<?php
// Specify the session name
session_name('maq');
session_start();
if (! defined ( 'FILE_MAKE_QUIZ_ACCEPT' )) {
echo "Possible hacking Attempt";
exit ();
}
// Define constants
/**
* The base URL of uQuiz for a trailing slash
* @var constant
*/
define("##########", '##########');
// Get the database connection
$db_con = Db::GetConnection();
// Run Session Update Function if they are logged in still
// This runs once every page load
Session::UpdateSession();
我试过注释掉GetConnection
and UpdateSession
from func.php
,但它仍然取消了我的$_SESSION
变量。
这太奇怪了。有什么想法可能导致这种情况吗?