即使设置了值,PHP$\会话仍返回空数组

即使设置了值,PHP$\会话仍返回空数组,php,session,Php,Session,我正在尝试诊断一个PHP问题。我正在将值传递给$\u会话数组,而这些值不被该数组接受。我使用var_dump$_会话查看返回的内容,得到数组0{}。即使我知道正在设置会话并将值添加到数组中,这也是正确的 下面是my code index.php的简化版本: 变量转储$会话//将转储数组3{…} 要重新创建错误,请执行以下操作: 加载页面。这里没问题;顶部的var_dump$_SESSION返回预期的array0{},而botton处的会话也返回预期的三成员数组。 提交表单时,在查询字段中有某些内

我正在尝试诊断一个PHP问题。我正在将值传递给$\u会话数组,而这些值不被该数组接受。我使用var_dump$_会话查看返回的内容,得到数组0{}。即使我知道正在设置会话并将值添加到数组中,这也是正确的

下面是my code index.php的简化版本:

变量转储$会话//将转储数组3{…} 要重新创建错误,请执行以下操作:

加载页面。这里没问题;顶部的var_dump$_SESSION返回预期的array0{},而botton处的会话也返回预期的三成员数组。 提交表单时,在查询字段中有某些内容会导致验证失败。尽管在上一次页面加载中设置了$_会话变量,但第一次转储仍然返回array0{}。 为了解决这个问题,我简化了这里的代码,但是我有另一个页面,它毫无困难地返回了$u会话变量,并且第一个var_转储生成了一个单成员数组。这里的问题是我将表单提交给它自己吗?如果是,除了$\u会话数组之外,还有其他方法将值从一个页面加载传递到下一个页面加载吗?我查看了PHP文档并进行了大量搜索,但没有找到任何有用的东西

我还应该注意到,会话ID在页面加载时是相同的,因此会话状态似乎是在页面加载到页面加载时保持的


提前感谢您的帮助。

确保您的服务器配置允许会话cookie

session.use_cookies = 1

另一种选择是,会话id在GET中传递,您必须将其专门附加到表单操作中,而您没有这样做。因此,一旦发布了值,就不会有会话。

请确保您的服务器配置允许会话cookie

session.use_cookies = 1

另一种选择是,会话id在GET中传递,您必须将其专门附加到表单操作中,而您没有这样做。因此,一旦发布了值,就没有会话。

会话是否正确启用?以下是PHP服务器会话设置的文档


为了补充Jeremy的答案,您还可以拒绝Cookie。

会话是否正确启用?以下是PHP服务器会话设置的文档


再加上杰里米的回答,您也可以拒绝Cookie。

您仍然可以在使用POST时使用POST,而不是会话-只需将变量及其值打包到一个或多个隐藏输入即可。您可以从一次提交中序列化POST,并将其插入隐藏输入,或者您可以在第一次提交时创建尽可能多的隐藏输入。然后在第二次提交中,可能是多步骤表单的第二步,您发布新数据,当然是第一次提交的数据

但我仍然更喜欢会话,因为它更容易,不必实现更多的代码

是否确定每次加载/提交页面时都不会重新生成会话?如果在页面加载/提交时重新生成会话ID,则旧会话及其数据将丢失,并且数据将插入到新会话ID下


还有一个建议:除非您确定$u请求是完全必要的,否则不要考虑它,而是只使用$u GET或$u POST从正确的通道获取数据…

而不是会话,您仍然可以在使用POST时使用POST—只需将变量及其值打包到一个或多个隐藏的输入中即可序列化从一次提交中删除帖子,并将其插入到隐藏输入中,或者您可以创建尽可能多的隐藏输入,只要您在第一次提交时有变量。然后在第二次提交中,可能是多步骤表单的第二步,您发布新数据,当然是第一次提交的数据

但我仍然更喜欢会话,因为它更容易,不必实现更多的代码

是否确定每次加载/提交页面时都不会重新生成会话?如果在页面加载/提交时重新生成会话ID,则旧会话及其数据将丢失,并且数据将插入到新会话ID下


还有一个建议:除非您确定$u请求是完全必要的,否则不要考虑它,而只使用$u GET或$u POST从正确的频道获取数据…

使用每个网页顶部的这一行:

如果!isset$\u会话{SESSION\u start;}


如果将$\u会话初始化为较低级别的脚本,则无法在较高级别访问`$\u会话变量。

使用每个网页顶部的此行:

如果!isset$\u会话{SESSION\u start;}


如果将$\u会话初始化为较低级别的脚本,则无法在较高级别访问`$\u会话变量。

SESSION.cookie\u secure=1可能会导致此问题

UPD:检查会话。对于非安全连接,cookie_secure设置为0

ini_set('session.cookie_secure', '0')
为我工作


UPD:类似的问题session.cookie\u secure=1可能导致此问题

UPD:检查会话。对于非安全连接,cookie_secure设置为0

ini_set('session.cookie_secure', '0')
为我工作


UPD:类似的问题

游戏开始有点晚了,可能是没有人遇到这个配置问题。事实上,我希望不是

我的web主机刚刚将我的所有站点移动到一个新服务器。他们彻底搞乱了文件和目录权限,以及运行Web服务器和php脚本的用户

看来

session.auto_start = 1
标志会导致另一个用户,如果我将其设置为0并仅使用

session_start();
在我的脚本中


令人惊讶的权限问题是会话文件已写入但无法读取。因此,自动启动会话总是空的。

这对游戏来说有点晚了,可能是没有人遇到这个配置问题。事实上,我希望不是

我的web主机刚刚将我的所有站点移动到一个新服务器。他们彻底搞乱了文件和目录权限,以及运行Web服务器和php脚本的用户

看来

session.auto_start = 1
标志会导致另一个用户,如果我将其设置为0并仅使用

session_start();
在我的脚本中



令人惊讶的权限问题是会话文件已写入但无法读取。因此,自动启动会话总是空的。

此代码在我的环境中运行良好。如果不是代码的全部复杂性,可以包含一些占位符吗?Jeremy,当然可以。事情是这样的:您的服务器可能配置不正确-没有对会话文件夹的可写访问权限?这段代码在我的环境中运行良好。如果不是代码的全部复杂性,可以包含一些占位符吗?Jeremy,当然可以。事情是这样的:有可能您的服务器配置不正确-没有对会话文件夹的可写访问权限?他在问题中说,相同的会话ID在页面加载中持续存在。感谢大家的快速回答。杰里米和其他人…很抱歉给你添麻烦,但我意识到了我的问题。在上面的示例中,我没有传递像chu这样的字符串,而是传递了一个变量,该变量本身的大小足以使服务器上的缓冲区溢出。我没有访问错误日志的权限,因此服务器管理员稍后进行了确认。谢谢你的跟进!他在问题中说,相同的会话ID在页面加载中持续存在。感谢大家的快速回答。杰里米和其他人…很抱歉给你添麻烦,但我意识到了我的问题。在上面的示例中,我没有传递像chu这样的字符串,而是传递了一个变量,该变量本身的大小足以使服务器上的缓冲区溢出。我没有访问错误日志的权限,因此服务器管理员稍后进行了确认。谢谢你的跟进!这并不能回答这个问题。若要评论或要求作者澄清,请在他们的帖子下方留下评论。我最近遇到了同样的问题,所以我只想分享一个可能的解决方案。它回答了上面的问题-为什么$\u会话返回空数组它对我有效,我尝试了太多的东西,但这是唯一有效的一个,感谢Boulis没有提供问题的答案。若要评论或要求作者澄清,请在他们的帖子下方留下评论。我最近遇到了同样的问题,所以我只想分享一个可能的解决方案。它回答了上面的问题-为什么$\u会话返回空数组它对我有效,我尝试了太多的东西,但这是唯一有效的一个,感谢broThere,永远不需要有条件地调用SESSION\u start。在需要维护会话超全局的任何页面上执行任何操作之前,无条件地调用它。永远不需要有条件地调用session\u start。在需要维护会话超全局的任何页面上执行任何操作之前,无条件地调用它。