非常简单的实验。我有index.php
,其中包含:
if ( !isset( $_SESSION ) ) {
session_id( random_string() );
session_start();
}
echo session_id();
random_string()
只返回一个随机的20个字符A-Z,a-z,0-9字符串。
在重新加载此页面时,它将始终生成新的会话ID,因为在session_start()
语句之前没有调用if
,并且(恢复)$_SESSION
超级全局不会不存在。
但是,如果我在脚本顶部拨打session_start()
,我就失去了指定自定义会话ID的机会,因为设置自定义ID必须在之前 >致电session_start()
。
我无法弄清楚这一点。鸡/蛋问题。那么,如何成功实现自定义会话ID,这将使页面加载之间的超级全局保持活动状态?
答案 0 :(得分:0)
在文件系统和数据库的帮助下,您可以在整个页面中拥有自己的自定义会话ID。我编写了以下代码,以使用文件系统方法跟踪所有页面中的相同会话ID:
if(filesize('session_track.txt') === 0) {
file_put_contents('session_track.txt', random_string());
}
$session_id = file_get_contents('session_track.txt');
session_id($session_id);
session_start();
// Here is the conditional statement, in case you need to regenerate your custom session id again
$regenerate_custom_session_id = false; // if need, set it to true.
// This code depends on your requirements. I just mentioned this conditional statement for your understanding to make it logically work
if($regenerate_custom_session_id === true) {
file_put_contents('session_track.txt', '');
}
我不确定这段代码的效率如何。我刚刚分享了我的想法,让它发挥作用。