抱歉,如果我听起来太天真,我的问题是实际上Boolean
值True
& False
用于session_regenerate_id()
,
根据php.net,我可以得到这个解释,
bool session_regenerate_id([bool $ delete_old_session = false])
session_regenerate_id()会将新会话ID替换为当前会话ID 一,并保留当前的会话信息。
delete_old_session 是否删除旧的关联会话文件。
所以基本上当我们将True
传递给session_regenerate_id()时,它会删除与此相关的旧Session值吗?
所以我尝试使用下面的代码行来测试它,
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
error_reporting(-1);
session_start();
echo 'Initial Session ID ::'. session_id().'<br>';
$_SESSION['test'] = 'ok'; //set a session value
session_regenerate_id(false); // true or False what difference does it make ?
echo 'New Session ID with FALSE param during regenaration ::'.session_id().'<br>';
echo 'IS SESSION EXIST ? <br>';
print_r($_SESSION);
echo '<br>';
session_regenerate_id(true); // true or False what difference does it make ?
echo 'New Session ID with TRUE param during regenaration ::'.session_id().'<br>';
echo 'IS SESSION EXIST ? <br>';
print_r($_SESSION);
echo '<br>';
exit;
输出
Initial Session ID ::2du1rt3c5ou01db2ruvr32qli7
New Session ID with FALSE param during regenaration ::epid6rhi2k9cfthdrh69udqlk1
IS SESSION EXIST ?
Array ( [test] => ok )
New Session ID with TRUE param during regenaration ::4o766kh2g4eae8vlqupnkmmer5
IS SESSION EXIST ?
Array ( [test] => ok )
在我的情况下,我可以看到True or False
没有更改已设置的会话值的行为,它只会更改session
的ID。
我的代码或理解有问题吗?
编辑2:如果我想使用自己的会话ID(自定义生成)初始化会话(第一次用户访问时),那么正确的方法是什么?
这种做法有什么用?
session_start();
//Create new session without destroying the old one
session_regenerate_id(false);
//Grab current session ID and close both sessions to allow other scripts to use them
$newSession = session_id();
session_write_close();
// Set session ID to the new one, and start it back up again
session_id($newSession);
session_start();
答案 0 :(得分:3)
参考仅讨论会话文件。
因此,如果您将TRUE传递给session_regenerate_id()
,会立即删除会话文件(由临时/会话目录中某处的PHP管理),而不是等待垃圾回收。
答案 1 :(得分:1)
从这里采取:http://php.net/manual/en/function.session-regenerate-id.php
bool session_regenerate_id([bool $ delete_old_session = false])
delete_old_session Whether to delete the old associated session file or not.
删除与会话关联的旧文件。它意味着会话不会破坏,它只是删除旧文件。 销毁:session_destroy()或只是空$ _SESSION = [];
如果您的网站有高负载,我建议您使用apc,memcache,redis进行会话并忘记文件。因为使用文件操作会在服务器的磁盘驱动器上产生IO负载。
ini_set('session.save_handler', 'memcache'); // memcache
ini_set('session.save_handler', 'mm'); // shared memory