【问题标题】:isset working on local server but not working on live serverisset 在本地服务器上工作但不在实时服务器上工作
【发布时间】:2012-08-16 14:37:28
【问题描述】:

我的代码在本地服务器上运行良好,但在实时服务器上无法运行。

我的本​​地服务器是 WAMP,而实时服务器是带有 LiteSpeed、PHP 和 MySQL 的 Unix。

问题是我希望仅在不存在时才创建新会话。请问有人可以帮忙吗?

具体代码如下:

$cart = $_SESSION["cart"];

if (isset($cart))// this checks if session has been created already.
$cart = $cart; // if session is already set, it uses the random value already created.
else {
$_SESSION["cart"] = rand(111111111,999999999);// if session has not be created        before a new randome number is picked.
$cart = $_SESSION["cart"];
}

【问题讨论】:

  • 您能否更具体地说明它不起作用 - 您的意思是 $_SESSION["cart"] 已设置,但 isset 没有接手;或者它是 not 设置,并且 isset 告诉你它是?
  • 我的意思是每次我重新加载页面时,$cart 的值都会改变。它不应该。
  • @EhisAsibor 你打电话给session_start()了吗?您的本地服务器可能启用了session.auto_start
  • 是的,我在页面顶部调用了 session_start();....

标签: php apache wamp isset litespeed


【解决方案1】:

isset() 正在检查是否设置了变量,这很明显:

$cart = $_SESSION["cart"]; // setting the variable $cart and assigning it some value

if (isset($cart)) // this checks if session has been created already
  // and it will return TRUE anyway because `$cart` is already defined above regardless value it was assigned

这部分代码不检查是否设置了$_SESSION['key'],而是检查$cart 变量。实际上已经设置好了。这里可以检查它是is_null() 还是empty(),但不是isset()

【讨论】:

  • 太多人错误地使用了isset()。那里有一个糟糕的网站教这个吗?
  • 当然,他写的(用isset())行为是出乎意料的。
【解决方案2】:

这个应该可以在任何地方工作:

if(empty($_SESSION["cart"])){
    $_SESSION["cart"] = rand(111111111,999999999);
    $cart = $_SESSION["cart"];
} else
    $cart = $_SESSION["cart"];

【讨论】:

  • 这应该可以。它一定是别的东西。请显示更多代码和测试结果
  • 我想这不可能不工作!它只是检查,如果它是空的,创建一个新的,你可以粘贴print_r($_SESSION); 的输出吗?
  • 另外,我同意你的观点,它应该可以工作,但不幸的是它没有。我在检查期间打印 $cart 的值,每次加载页面时,我都会看到值发生变化。你能想到服务器设置中可能导致这种情况的任何配置吗?
  • 这不起作用的可能原因是: 1.服务器上安装的php非常旧(低于4.1),您可以使用phpversion()函数检查。 2. 您忘记了 session_start() 3. 您正在使用的服务器已禁用 cookie 4. 您的浏览器不允许来自服务器的 cookie 您可以使用 firefox 上的 firebug 或类似工具检查 3 和 4
  • 请问如何检查服务器上的cookies是否被禁用?
【解决方案3】:

确保会话已启动并检查是否设置了原始购物车。

session_start();
if(!isset($_SESSION['cart']))
{
    $_SESSION['cart']=rand(111111111,999999999);
}

【讨论】:

  • 是的,会话开始了,我有 session_start();位于页面顶部,但我现在将测试您的修改。
  • 同样的问题,它可以在我的本地主机上运行,​​但不能在实时服务器上运行。
【解决方案4】:

在您分配后立即尝试var_dump($cart) 并发布结果。

您可能还想检查$_Session[cart] 而不是分配和检查,

【讨论】:

  • 现在检查..很快就会发布结果
  • 没有运气同样的问题...这可能是实时服务器配置的问题吗?因为它在本地主机上完美运行
猜你喜欢
  • 2014-06-26
  • 2019-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
相关资源
最近更新 更多