如何使用自定义会话ID保持PHP会话持久?

时间:2016-11-28 23:35:36

标签: php session

非常简单的实验。我有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,这将使页面加载之间的超级全局保持活动状态?

1 个答案:

答案 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', '');
}

我不确定这段代码的效率如何。我刚刚分享了我的想法,让它发挥作用。