在PHP中,我应该调用保存SESSION值的变量而不是直接调用SESSION本身吗?

4
如果PHP会话变量存储在文件中(默认情况下是这样的),那么假设我将用户的姓名存储到会话变量中...
$_SESSION['username'] = 'Jason Davis';

现在,当一个页面被构建时,如果我在构建过程中调用 $_SESSION['username'] 100 次,它会 100 次命中 session 文件并对其进行读取吗?
同样的问题也适用于将 session 存储在 MySQL 中。它会查询数据库 100 次以从 sessions 表中获取用户名吗?
我只是想知道是否应该在页面中调用一次会话变量,然后将其存储到本地变量中,并在其他 99 次使用该变量。就像这样...
$username = $_SESSION['username'];
echo $username; // 100 times throughout all the files that build my page.

注意:请注意这只是一个例子,在实际操作中我需要访问的不仅仅是用户名会话,而且100次很可能会减少,但分散在多个会话键/值上。
2个回答

3

$number_of_times_beaten_by_gumbo_today++ - Adam Hopkinson
如果我更改我的会话以使用MySQL进行存储,并且我多次调用$_SESSION ['username'],它也不会不断从MySQL中获取我的会话吗? - JasonDavis
@jasondavis:是的,当调用session_start时,会读取一次会话数据并存储在$_SESSION中。 - Gumbo

0

只有在调用 session_start() 函数时才会读取文件。

至于 MySQL,如果您进行查询,获取用户名并将其存储在变量中,则不会再有任何其他查询。如果您将某些内容存储在变量中,它就是一个副本,与您从中获取的原始值无关。

最好的问候, lamas


你好,我意识到如果将数据存储到变量中,它就不会再次访问数据库。我的问题是,如果我不将它存储到本地变量中,PHP会反复访问吗? - JasonDavis
在这种情况下,它的行为就像我所说的Gumbo一样 - 您可以随意使用$_SESSION,并且它将像“普通”变量一样运行,直到您再次调用session_x()函数为止 :) 因此,不,您不必将其存储在本地变量中。 但是,如果您不想一遍又一遍地编写$_SESSION,我建议这样做! - lamas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接