【发布时间】:2013-10-01 14:49:22
【问题描述】:
考虑到服务器负载,我想知道每次对会话的调用是否都是对服务器的单独调用,这会增加服务器负载? 让我稍微解释一下。假设在每个 php 页面中,我必须设置 10 个会话数据,并且必须像这样调用 10 个会话数据:
$_SESSION['a']=1;
$_SESSION['b']=2;
$_SESSION['c']=3;
$_SESSION['d']=4;
$_SESSION['e']=5;
$_SESSION['f']=6;
$_SESSION['g']=7;
$_SESSION['h']=8;
$_SESSION['i']=9;
$_SESSION['j']=10;
echo $_SESSION['a'];
echo $_SESSION['b'];
echo $_SESSION['c'];
echo $_SESSION['d'];
echo $_SESSION['e'];
echo $_SESSION['f'];
echo $_SESSION['g'];
echo $_SESSION['h'];
echo $_SESSION['i'];
echo $_SESSION['j'];
设置上述 10 个会话并输出相同,这些是对服务器的 20 个单独调用还是通过 session_start(),在页面加载期间一次性加载整个会话数据?
还想知道如何在会话中存储多维关联数组?假设我想这样设置上面的 10 个会话数据:
$_SESSION['mydata']=array(
a=>1,
b=>2,
c=>3,
d=>4,
e=>5,
f=>6,
g=>7,
h=>8,
i=>9,
j=>10
)
echo $_SESSION['mydata']['a'];
通过上面的例子,如果每个会话调用都是对服务器的单独调用,我可以减少服务器负载。
有人告诉我设置和获取会话数据时发生了什么吗?
【问题讨论】:
-
PHP 代码全部在服务器上。
-
您了解会话数据的实际含义吗?通过将数据保存在用户特定的“会话”中而在服务器调用之间持久保存的数据?
-
这确实提出了一个有趣的问题...
$_SESSION超全局,当会话被实例化时所有数据是否完全传播(将所有数据保存在内存中)或者是否有文件系统读取每次访问 $_SESSION 时保存在 /tmp 中的会话文件(默认情况下)?我以前从未真正考虑过。 -
SLaks,我知道 php 是服务器端代码。但我告诉过,由于会话本身是一个关联数组,所以当我们通过 session_start 启动会话时,无论是在 php 脚本加载期间所有存储的会话同时加载还是像 $_SESSION['a'] 这样调用每个会话都会单独调用服务器?
-
@stockBoi - 好的,会话 101。调用 session_start()(或脚本的状态,如果会话设置为自动启动)从会话的永久存储(通常是文件系统)读取数据并填充超全球 $_SESSION。如果之前不存在会话,则会创建一个空的 $_SESSION。对 session_write_close() 的调用或脚本的终止会将 $_SESSION 的内容写入会话的永久存储...在这之间,它保存在 $_SESSION 的内存中