我想在单个 PHP 脚本中使用两个独立的 $_SESSION。
我尝试使用以下代码验证这是否可行。
error_reporting(-1);
session_name('session_one');
session_start();
$_SESSION = array();
$_SESSION['session_one_var'] = 'test_one';
$output1 =
(
"session_id(): '" . session_id() . "'.<br/>\n" .
"session_name(): '" . session_name() . "'.<br/>\n" .
print_r($_SESSION, true)
);
session_write_close();
$_SESSION = array();
session_name('session_two');
session_start();
$_SESSION['session_two_var'] = 'test_two';
$output2 =
(
"session_id(): '" . session_id() . "'.<br/>\n" .
"session_name(): '" . session_name() . "'.<br/>\n" .
print_r($_SESSION, true)
);
session_write_close();
$_SESSION = array();
echo "$output1<br/>\n<br/>\n$output2";
输出:
session_id(): 'f19aecd8d3ce0c5d444456d2387c6e35'.
session_name(): 'session_one'.
Array ( [session_one_var] => test_one )
session_id(): 'f19aecd8d3ce0c5d444456d2387c6e35'.
session_name(): 'session_two'.
Array ( [session_one_var] => test_one [session_two_var] => test_two )
我希望输出显示名为“session_one”的 session 包含数组(“session_one_var”=>“test_one”),名为“session_two”的 session 包含数组(“session_two_var”=>“test_two”)。相反,“session_two”似乎与“session_one”是同一个 session 。
如果我插入一行“session_regenerate_id();”在第二个“session_start();”之后行中,为“session_two”报告了不同的 session ID,但输出在其他方面是相同的。见下文。
session_id(): 'f19aecd8d3ce0c5d444456d2387c6e35'.
session_name(): 'session_one'.
Array ( [session_one_var] => test_one )
session_id(): '3bcc74a7bcbac30e680c5b94fadcede1'.
session_name(): 'session_two'.
Array ( [session_one_var] => test_one [session_two_var] => test_two )
我做错了什么?
我知道以前曾在这个论坛上提出过类似的问题,here 和 here,但到目前为止提供的答案未能启发我。
任何帮助将不胜感激。
最佳答案
当您运行第一个 session_start()
时,会从 cookie 中读取 session ID。即使您使用 session_write_close()
也会留下来(否则您将无法调用 session_start()
重新打开同一 session )
我这里没有方便的 PHP 来测试这个,但理论上,你可以这样做 session_id($_COOKIE['session_two']);
在第二个之前session_start()
切换到正确的 ID。
不过,我的 cookie 名称可能有误,所以您可能需要printr($_COOKIE);
查看设置了哪些 cookie。
编辑:我忘了提及: session 的 cookie 名称基于 session_name
,或者至少如果您仅在文件中使用单个 session 的话。
关于php - 可以在单个 PHP 脚本中使用多个独立的 $_SESSION 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3150355/