用于存储数据的会话或常量,在这种情况下更好

时间:2009-12-22 16:42:41

标签: php session constants

我想在我的网站上为不同语言存储数据提供一些建议。我花了几个小时搜索,似乎无法找到我需要的东西。这是我的情况,所以让我知道你的想法。

我有一个网站,多个用户可以登录查看和存储信息。我在FreeBSD操作系统上使用php,Mysql,Apache(虽然在开发过程中它现在在我的Vista主页盒子上)。我在$ _SESSION中存储了一些帐户信息,但大多数都使用带有局部变量的类来存储我需要的数据。我将拥有2,000到6,000个webapp用户,所以我关注性能。我希望以多种语言提供此功能。我见过的一些网站提供了一个下拉列表,用户可以选择他们的语言偏好,我喜欢。

我有两个我想到的选择,但不知道哪个更好,或者是否有更好的方法来实现这一目标。一种方法是将语言特定数据存储在$ _SESSION对象中。因此,用户将登录,并且基于语言首选项,$ _SESSION将使用适当的语言文本填充到整个webapp中使用的变量中。这可能意味着我将有大约300个左右的变量与字符串数据(没有对象)...例如$ _SESSION ['My_Title'] =“这是我的网站的标题,英文或德文等”。另一种选择是使用CONSTANTS并在配置文本文件中定义每个CONSTANT,并在登录时根据语言首选项集加载该文件。我在某处读到使用CONSTANTS比$ _SESSION慢一些,但会话会占用更多RAM。

您可以指出的任何想法或资源?感谢。

2 个答案:

答案 0 :(得分:1)

您输入$_SESSION的数据是基于每个用户的 - 这意味着如果您在10个用户的$_SESSION中放入相同的数据,那么您将重复该数据10次

我不会将你的应用程序的本地化字符串放在$_SESSION,personnaly:它是“常量”的东西,对每个用户都是一样的 - 所以它不会在特定的空间中占有一席之地给每个用户。


使用PHP常量可能是一个想法;例如:

en.php

define('LANG_TITLE', 'The title of the site');
define('LANG_WElCOME', 'Welcome on my site');

fr.php

define('LANG_TITLE', 'Le titre du site');
define('LANG_WELCOME', 'Bienvenue sur mon site');


使用PHP数组将是另一个;例如,你有 en.php

$lang = array(
    'title' => "The title of the site", 
    'welcome' => "Welcome on my site", 
);

fr.php

$lang = array(
    'title' => "Le titre du site", 
    'welcome' => "Bienvenue sur mon site", 
);


你应该选择哪一个?我想这主要是品味问题,这两个想法之间应该没有多大区别。


或者,另一个完全的想法是使用类似gettextsee also)的东西,这是一种标准的翻译方式,并且(当然)可用{{3 }}

如果我必须选择,我可能会选择基于gettext的解决方案,因为它非常标准 - 或者我使用Zend Framework的from PHP类,至少对于基于ZF的项目< em>(顺便说一句,其中有一个使用gettext的适配器;-))

答案 1 :(得分:0)

尝试在会话中存储尽可能少的数据。默认情况下,会话数据由PHP存储在您的文件系统中,文件系统访问几乎总是很慢。

我使用session来存储用户的标识符。除此之外,我还要三思而后行。

在请求之间存储需要持久化的数据的可能替代方案是内存数据存储或数据库(可能在仅存储在内存中的表中)。