php Aruba $ _session问题

问题描述

| 我正在Localhost和服务器“ Aruba”上测试此代码。 在本地环境中,它完美运行,而在服务器上,我没有预期的会话值 当我回显$ _SESSION [\'lang \']时,它输出: -本地主机中正确的国家/地区代码(例如。\'en \') -在Aruba服务器上,$ _SESSION [\'lang \']输出名为$ lang的数组(您可以在lang.en.PHP上找到),而不是所需的国家代码! 我哪里错了? 谢谢 路卡 我的home.PHP
require_once(\'/web/htdocs/www.mywebsite.com/home/includes/langSwitcher.inc\');
echo $_SESSION[\'lang\'];
[..]
我的langSwitcher.inc
session_start();
header(\'Cache-control: private\'); // IE 6 FIX

if(isset($_GET[\'lang\']))
{
$lang = $_GET[\'lang\'];

// register the session and set the cookie
$_SESSION[\'lang\'] = $lang;

setcookie(\'lang\',$lang,time() + (3600 * 24 * 30));
}

else if(isset($_SESSION[\'lang\']))
{
$lang = $_SESSION[\'lang\'];  
}

else if(isset($_COOKIE[\'lang\']))
{
$lang = $_COOKIE[\'lang\'];
$_SESSION[\'lang\']=$lang;
}
else
{
$lang = \'en\';
$_SESSION[\'lang\']=$lang;

}

switch ($lang) 
{
 case \'en\':
 $lang_file = \'lang.en.PHP\';
 break;

 case \'it\':
 $lang_file = \'lang.it.PHP\';
 break; 

}

include_once $lang_file;
我的lang.en.PHP
/*
-----------------
Language: Italian
-----------------
*/



$langcode=\'en\';

$lang = array();

$lang[\'PAGE_TITLE\'] = \'pagetitle\';

$lang[\'HEADER_TITLE\'] = \'title header \';

$lang[\'SITE_NAME\'] = \'name site\';

$lang[\'heading\'] = \'title\';
    

解决方法

听起来好像启用了
register_globals
(尽管该功能已被弃用)。您可以通过运行
phpinfo()
并查找
register_globals
条目来查找。 假设已启用它,唯一的解决方案是将其修复为
php.ini
(不能通过
ini_set()
调用覆盖
register_globals
)。     ,好吧,您正在使用$ lang保留语言代码,而且还存储数组信息。也许在langSwitcher.inc中,您应该使用$ langcode来存储会话? 因为您还在会话中设置$ lang变量。在您的服务器上,它似乎正在使用对$ lang文件的引用,并因此将最新的内容集输出到$ lang(这是数组),而在本地它将存储$ lang的实际内容。 无论如何,可以通过不使用相同的变量名存储两个不同的项来解决。