繁体   English   中英

使用自定义会话处理程序时,如何从PHP的defualt会话中获取值?

[英]How do I get a value from PHP's defualt session when a custom session handler is in use?

我有一个非CMS页面,其中使用PHP的默认会话处理程序存储会话值。 即:

session_start();
$_SESSION['MyVar'] = true;

在CMS的另一页上,我需要测试变量是否为true。 但是,CMS使用它自己的会话处理程序,因此当我尝试读取该变量时,它是未定义的,因为它是在CMS的会话存储系统中寻找它的,而不是PHP的默认值。

如何切换一会儿并从默认会话存储中读取一个值,然后恢复CMS使其正确运行?

就像是:

$SessionHandler = session_get_current_handler(); // save the CMS session handler
session_use_default(); // Use PHP's default handler
$Value = $_SESSION['MyVar']; // Get the value I need
session_set_handler($SessionHandler); // Restore CMS handler

在某些时候,您将需要调用session_start()来填充$_SESSION超全局数组。 您可以“调用” session_write_close() ,更改处理程序,然后再次执行session_start()

试试看,它看起来像

$Sessionhandler = session_get_current_handler();
session_use_default();
session_start();
$value = $_SESSION['var'];
session_write_close();
session_set_handler($Sessionhandler);
session_start();

我几乎怀疑它是否会起作用。 它“可能”工作的唯一原因是session_write_close()因为如果您尝试两次调用session_start() ,PHP通常会抛出E_NOTICE

根据实现的不同,它可能会尝试再次获取数据。 但是很多人在文档注释中看到,即使在session_write_close()之后,两次调用session_start()也会发生奇怪的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM