【问题标题】:PHP session_id never the same on refreshPHP session_id 在刷新时永远不会相同
【发布时间】:2014-09-10 23:02:07
【问题描述】:

我正在尝试在某些 php 页面上使用 session_id(),但是每个文件之间的 id 都会发生变化,并且每次我刷新页面时都会发生变化。我放置了以下脚本,它应该在重新加载时增加,但它没有。

session_start();
if (!isset($_SESSION['hits'])) $_SESSION['hits'] = 0;
++$_SESSION['hits'];

echo '<p>Session hits: ', $_SESSION['hits'], '</p>';
echo '<p>Refresh the page or click <a href="', $_SERVER['PHP_SELF'],
'">here</a>.';

在我的 php.ini 文件中,我打开了 cookie 并设置了我的 save_path tp '/tmp'。

在实际文件夹中,有会话文件...所以我知道这不是文件写入问题。我还确保每个文件都是带有 bom 的 utf-8 以确保一致性。

如果您有任何其他的解决方案,请帮我解决这个问题。它快把我逼疯了。

谢谢!!!

【问题讨论】:

  • 你是如何使用 session_id() 的?
  • 您的代码在我这边运行良好,因此很可能是 PHP 配置或权限问题。
  • @Bilbonic 你看过你的服务器日志了吗?某处一定有错误或警告
  • 实际上,您可以将文件转换为 UTF-8 没有 BOM 吗? BOM 可能被解释为页面内容而不是 PHP 代码,然后甚至在代码执行之前发送到浏览器,一旦完成,您的代码就无法再发送任何标题(因此没有设置会话 cookie),它应该触发Headers already sent 警告,但您的配置可能设置为隐藏警告。
  • 对不起,我打错了。都是没有BOM的utf-8

标签: php session


【解决方案1】:

对于您的情况,我能想到的 3 种可能性是:

  1. 你怎么打电话给session_id()?在您的问题中包含该代码。如果您使用 any 参数调用它,它会将会话 ID 覆盖为您传递的任何参数。
  2. 您的浏览器中是否启用了 cookie?会话 ID 作为 cookie 发送到浏览器。
  3. 您是否随时致电session_destroy()?这将从服务器中删除会话数据,并导致在后续浏览量中启动新会话。

【讨论】:

  • 感谢您的回复。它帮助我找到了错误。现在一切正常!谢谢!
【解决方案2】:

这是因为您每次刷新页面时都会创建一个新会话。您必须将会话开始语句括在 if 中。

if(session_id() == ''){ session_start(); }

【讨论】:

  • 不正确。 session_start() 只是启动会话“引擎”并允许会话工作。如果没有会话,它会自动创建一个新会话,但不会覆盖已经存在的会话。
  • @AndréDaniel 你如何假设操作在他在这里调用 session_start() 之前已经创建了一个会话?
  • @AndréDaniel 这不是真的。如果尚未设置会话,则引用 $_SESSION 应该会出错。如果有的话,这个答案是检查现有会话的方法
  • @AndréDaniel 我确定他不仅仅使用这段代码。也许他在到达这个脚本之前破坏了另一个脚本中的会话。说是他的php配置,这个假设太大了
  • @NuGnojMik 要么他的浏览器拒绝会话 cookie,要么 Web 服务器由于错误而截断/删除 Set-Cookie 标头(已经在另一个问题上看到了这一点),或者他的 PHP 配置不正确。除此之外,我们的“工作”是使用作者提供的代码来重现问题,而不是浪费我们的时间推测可能会干扰这个问题的其他代码。
猜你喜欢
  • 2015-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-21
相关资源
最近更新 更多