【问题标题】:How to run code once per user session in PHP?如何在 PHP 中每个用户会话运行一次代码?
【发布时间】:2011-12-07 19:30:41
【问题描述】:

好的,我四处寻找,发现应该如何完成。例如,查找this question。但是它对我不起作用,所以我一定是做错了什么,但如果我知道什么,那就该死了。

好的...这是我的小代码块:

<?php
    session_start();

    if(!isset($_SESSION['didit'])) {
        $url = "http://www.mysite.com/clients/vatera.asmx/DoSomething";
        file_get_contents($url);
        $_SESSION['didit'] = true; 
    }
?>

url file_get_contents 一切正常。唯一不起作用的是“运行一次”检查。它每次都通过页面运行 url 代码。它应该只在您第一次在会话中点击页面时运行。此块位于我页面中的 &lt;html&gt; 标记之后。

我尝试过的其他一些事情:

if(empty($_SESSION['didit']))
if($_SESSION['didit'] != true)
if($_SESSION['didit'] <> true)

我还尝试将设置变量的行移到 $url 赋值之前。

这些都没有奏效。每次加载页面时,它都会继续运行代码。 提前致谢!

【问题讨论】:

  • 当你说“跟随&lt;html&gt;标签”时,你的意思是之前,对吗? session_start() 必须在任何输出之前。
  • 还要确保将 error_reporting(-1); ini_set('display_errors', 1); 也放在脚本的顶部,以便 PHP 为您提供任何适当的错误或警告消息。
  • @simshaun 啊!是的,就是这样。我移动了它,以便 PHP 块是文件中的第一件事,现在它可以工作了。谢谢你!!!如果您作为答案发布,我会接受并给您代表。
  • 好交易。很高兴这是一个简单的解决方案:)。已发布答案。

标签: php session runonce


【解决方案1】:

当你说“跟随&lt;html&gt;标签”时,你的意思是之前,对吧?
session_start()必须在任何输出之前。

【讨论】:

  • 非常感谢您的提示。我是一个原生的 ASP.NET 人,......我能够找到 PHP 语法等所需的一切,但只是错过了一个小细节。现在完美运行!
【解决方案2】:

你如何测试你的代码?它只能在真实的浏览器中正常工作。因此,如果您使用 wgetcurl 进行测试 - 您的条件代码将始终运行 b/c wget & curl 默认情况下不保留会话 cookie。

还要确保您没有在浏览器中阻止 cookie。

【讨论】:

  • 我通过在浏览器中运行我的页面进行测试。
猜你喜欢
  • 2014-09-24
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-16
  • 1970-01-01
相关资源
最近更新 更多