我的情况是我开始了一个会话:
session_id( $consistent_session_name_for_user );
session_start();
$_SESSION['key'] = $value;
但后来我决定我实际上并不想“提交”(写)这个会话。 PHP似乎没有任何session_abort_write()
函数。我不想从先前的脚本运行中销毁会话变量,所以我不能使用session_destroy()
我试过了session_id("")
,但是这次通话失败了。我可以“重定向”会话,以便它写入另一个会话,如session_id("trash")
,但这会导致很多PHP(Apache)连接尝试写入同一个会话“文件”,我想避免
我在这里高度简化了问题,我们实际上是在Memcached中存储会话,这是一个复杂的代码库。所以我不想一直向Memcached服务器发送不必要的“垃圾”会话。
答案 0 :(得分:1)
来自PHP.net,
session_regenerate_id
将用新的会话ID替换当前的会话ID,并保持
当前会议信息。
session_unset将释放所有已注册的变量 session_unregister ( string $name )将取消注册特定变量
答案 1 :(得分:1)
我实际上并没有确定此方法是否阻止将会话写入会话存储,但这是我最终使用的解决方案:
session_id( 'trash' ); // or call session_regenerate_id() as someone else suggested
$_SESSION = array(); // clear the session variables for 'trash'.
我希望这会产生什么效果,但是我猜它还会写一个空白文件,因为PHP无法知道sess_trash还没有。
如果您想完全避免编写会话,则必须在PHP中使用自定义会话处理程序并设置全局标志以防止编写会话。
答案 2 :(得分:0)
有session_write_close()
。它将会话数组转储到存储,然后“关闭”它 - $ _SESSION仍然可用且可读/可写,但不会再保存任何更改,除非您稍后在脚本中再次执行session_start()
答案 3 :(得分:0)
您可以使用session_set_save_handler的内容将虚拟函数放入会话处理中。
<?php
function fakeIt() {
return true;
}
session_set_save_handler("fakeIt", "fakeIt", "fakeIt", "fakeIt", "fakeIt", "fakeIt");