php Aruba $ _session问题

时间:2011-04-14 12:43:33

标签: php session

我正在Localhost和服务器“Aruba”上测试此代码。

在本地环境中它完美运行,而在服务器上我没有预期的会话值

当我回显$ _SESSION ['lang']时,它输出:

- localhost中正确的国家/地区代码(Ex.'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';

2 个答案:

答案 0 :(得分:1)

听起来register_globals可能已启用(尽管该功能已弃用)。您可以通过运行phpinfo()并查找register_globals条目来查找。

假设它已启用,唯一的解决方案是在php.ini中修复它(您无法通过register_globals调用覆盖ini_set()

答案 1 :(得分:0)

你使用$ lang来保存langcode,还要存储数组信息。也许在langSwitcher.inc中你应该使用$ langcode存储会话?

因为您还在会话中设置了$ lang var。在您的服务器上,它似乎使用了对$ lang文件的引用,因此将最新的内容集输出到$ lang(这是数组),在本地它存储了$ lang的实际内容。

无论如何,可以通过不使用相同的变量名来存储两个不同的项来解决它。