从CodeIgniter 2迁移到CI3. PHP 8.2
通过查看网络流量,我已经确认没有多个请求。只有4个其他文件从同一台服务器加载,它们是favicon,两个svg文件和一个JavaScript脚本,没有一个通过CI。此外,如果多个请求导致了这个问题,那么在旧的CI2系统中也会发生这种情况,但这工作正常。
调用set_flashdata()
会在session_ci3表中设置相应的记录。如预期的那样,删除页面会从记录中删除flashdata。
如果在set_flashdata()
之后立即调用flashdata()
,则调用flashdata()
将返回正确的值。
$mytestmessage = $this->session->flashdata('mytestmessage');
echo "Old testmessage: $mytestmessage";
$this->session->set_flashdata('mytestmessage', 'THIS IS A TEST FLASHDATA MESSAGE');
$mytestmessage = $this->session->flashdata('mytestmessage');
echo "New testmessage: $mytestmessage";
字符串
多次运行上述代码的输出总是:“旧测试消息:新测试消息:这是一个测试闪存数据消息”
预期输出为“旧测试消息:这是一条测试 Flink 数据消息新测试消息:这是一条测试 Flink 数据消息”
该问题未在下文中得到答复:
2条答案
按热度按时间7kqas0il1#
首先,flashdata本身在CI3.x中已经是一个遗留方法,只是为了向后兼容:
这是一个遗留方法,保留它只是为了向后兼容旧的应用程序。您应该直接访问$_SESSION。
TL; TD;
使用php 8.1.2 flashdata工作完美无瑕
使用php 8.2.9旧版网站可能会抛出弃用警告,如果应用程序环境设置为“开发”;这些警告将禁用flashdata流
你可以通过在根目录index.php中将应用程序环境设置为“testing”或“production”来解决这个问题。这样就不会抛出弃用警告,flashdata会按设计工作。
深入查看:
在php8.1之前,不会抛出创建动态属性的弃用警告
在php 8.2中,这些警告显示为
留言:Creation of dynamic property ... is deprecated
在未来的php 9.x中,请注意这些弃用警告将实际上是一个错误,请参阅PHP RFC: Deprecate dynamic properties,内置属性
AllowDynamicProperties
提供了解决方案。现在如果你仔细看看CI的系统/核心,你会发现罪魁祸首是
Exceptions.php
函数show_php_error(...)
。它有一个include()
,它执行一个新的请求,因此“杀死”你的闪存数据。当环境设置为“测试”或“生产”并且flashdata继续无缝时,不调用此函数(针对弃用警告)。
oymdgrw72#
flashdata在新版本的php中不再支持,你应该用tempdata替换flashdata。
字符串
更多详情:CodeIgniter Session Library