php - 可以在单个 PHP 脚本中使用多个独立的 $_SESSION 吗?

标签 php session

我想在单个 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 ) 

我做错了什么?

我知道以前曾在这个论坛上提出过类似的问题,herehere,但到目前为止提供的答案未能启发我。

任何帮助将不胜感激。

最佳答案

当您运行第一个 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/

相关文章:

php - 插入在 mysqli 中不起作用的值

php - cakePHP 3 在模型中使用请求/授权数据的最佳实践(基于帐户的云服务)

asp.net - 在没有 session 的情况下访问 asp.net 中的公共(public)类变量

ruby-on-rails - 关闭浏览器时 session 未被破坏 - RailsTutorial.org

php - Symfony 3 TokenAuthenticator 结束 session

ruby-on-rails - ajax 调用期间不保存 Rails session

php - 扩展 2 个 PHP 类

php - 唯一页面浏览量计数(cookie 与 IP 地址与其他任何内容)

php - Slim 框架 fatal error : Uncaught exception 'InvalidArgumentException' with message 'Cannot create LogWriter

php - 具有快速转储数据能力的计数器键值存储