答案 0 :(得分:1)
我遇到了类似的问题(如果我理解正确的话)。我需要在脚本运行完毕后强制写入会话数据(对于自定义会话驱动程序)。可以注册关闭函数,该函数应在脚本完成后运行。
这可能会解决(或帮助您解决)您的问题。
http://php.net/manual/en/function.register-shutdown-function.php
答案 1 :(得分:1)
感谢您的帮助。我正在以正确的顺序做所有事情,但仍然没有写入会话数据。会话名称是必要的,因为有时我们使用相同的自定义CMS测试同一域上的许多站点。所以,最后,经过大量的测试而没有运气,我发现寄存器全局变量在这个服务器上是活跃的(我们从不使用它,代码写的当然是关闭了这个选项),但它与会话混乱!关闭这个做了很大的改变。没有更多的问题。我还在DB中创建了一个自定义会话处理程序,因此我可以更集中地跟踪问题。 结论:永远不要使用注册全局变量+命名会话,这是会话中的复杂数据。 无论如何,我会给这个问题更多的时间和更多的测试。 Ajax调用有时也太快了,我不得不放一个睡眠命令,所以写完会话数据真的完成了。谢谢
答案 2 :(得分:0)
我遇到了类似的问题,但是就在几年之后。 IE以自己的方式操纵标头,这会导致您可以在php.net档案中找到奇怪的php错误。
@Diego Pino Navarro,请参阅this help page并查找Safari及其与php的问题。
我还找到了"Safari "forget" http-authentication's logon-information"。
答案 3 :(得分:0)
我不确定,但我认为可能没什么建议可能会有所帮助。
在刷新页面之前删除会话cookie以进行测试:)
确保您没有为任何数组分配包含管道符(|)的键。这将阻止会话数据被序列化和保存。
session_regenerate_id(true);很多情况下session_write_close似乎与session_regenerate_id无关。或者只是在session_write_close()之后执行session_start(),如果你依赖于SID;在你的情况下,我认为这是导致问题的原因,因为你每次都要结束当前会话而不是为下一页重新启动它。希望你明白我的意思。更多信息要确保数据实际刷新到浏览器,请使用ob_end_flush();
我无法理解
之间的联系$_SESSION['data']['CMSeditores']=$retorno[1];
$_SESSION['data']['CMScont']=$retorno[2];
和
$nivelpermisos=$_SESSION['cms_logged_group'];
$useractual=$_SESSION['cms_logged'];
我认为您需要粘贴更多代码,而数据部分导致问题而不是管理员登录部分。
我希望这会对你有所帮助。:)
答案 4 :(得分:0)
你有两次建立会话名称的原因吗?我以前遇到的问题是我会在没有名字的情况下建立会话,然后另一段脚本(不是我的)命名会话。即使在脚本结束时,我也能打印出会话变量,但是一旦我进入新页面,我的会话就被遗忘了。直到我将第二个脚本中包含的名称复制到我的会话调用中才解决它。
检查是否没有使用其他会话名称;也许,在第一次调用会话时,可能只尝试命名会话一次?
答案 5 :(得分:0)
问题:你是否在调试浏览器之前和任何变量分配之前首先调用session_start()...
听起来很傻,但试一试。
另外,为什么使用会话名称?真的没有必要,除非你有很多同名的会话变量用于不同的目的,如果是这样,那么你需要先修复它!