草庐IT

PHP session 同步

coder 2024-04-08 原文

我正在用 PHP 开发 WebApp。用户将能够单击一个按钮,PHP 代码将最终调用系统执行程序。由于 WebApp 将使用 AJAX,因此用户可能会单击该按钮两次,或者实际上单击另一个按钮将启动另一个执行进程。

现在,我知道我可以编写一些 javascript 来禁用按钮,直到单个事件完成。但是,这是客户端强制执行,很容易被覆盖。

我可以在 PHP 方面做些什么来阻止这种事情发生吗?在我的脑海中,我有一个让 session 变量充当“信号量”的想法,并且在执行每个脚本之前,将检查该变量并且必须返回 0 才能继续执行脚本。

我这样做的方式正确吗?或者这是否只是为死锁/竞争条件打开了一堆蠕虫?

谢谢

更新: 简单来说,我正在开发的系统将用于启动、停止和重新镜像虚拟专用服务器。如果按下重新镜像按钮,PHP 脚本将调用一些 bash 脚本来开始重新镜像 VPS。但是,如果用户在执行此操作时尝试启动 VPS...

最佳答案

您可以使用 jQuery.ajax() 并将选项 async 设置为 false:

async Default: true By default, all requests are sent asynchronously (i.e. this is set to true by default). If you need synchronous requests, set this option to false. Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation. Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active

你可以这样使用它:

$.ajax({
    type: "POST",
    url: "file.php",
    async: false,
    data: data,
    success: function(return){
        alert("Success: "+return);
    }
});

如果你想添加一个加载器,只需将其应用为:

startLoader();
$.ajax({
    type: "POST",
    url: "file.php",
    async: false,
    data: data,
    success: function(return){
        alert("Success: "+return);
    }
});
endLoader();

不过你的 PHP idea 根本就不是一个好主意。打开一个 session 并为这种事情做所有的过程是没有用的,而且会减慢你的脚本。您应该问自己:我真的需要阻止它吗?

如果答案是肯定的,那么这样做: 在您的数据库中创建一个名为 processes 的表。在该表中创建 2 个字段: 一个是进程标识符:process_id;第二个是进程状态:process_status。第一个是您将使用 sha1(IMAGE) 定义的整数。 第二个将是一个整数:1 表示“忙碌”,0 表示“空闲”。

然后你可以这样做:

SELECT process_status FROM vps_processes WHERE process_id = sha1(CURRENT_IMAGE);

然后检查它是 1 还是 0。如果是1则阻塞脚本;如果它是 0 那么你查询:

UPDATE vps_processes SET process_status = 1 WHERE process_id = sha1(CURRENT_IMAGE);

然后在脚本查询结束时运行您必须运行的内容:

UPDATE vps_processes SET process_status = 0 WHERE process_id = sha1(CURRENT_IMAGE);

关于PHP session 同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5755775/

有关PHP session 同步的更多相关文章

  1. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  2. ruby-on-rails - 本地 yaml key 的 i18n 同步 - 2

    类似的问题,但对于java,Keepingi18nresourcessynced如何保持i18nyamllocals的key同步?即,当将key添加到en.yml时,如何将它们添加到nb.yml或ru.yml?如果我在my_title:"atitle"旁边添加键my_label:"sometextinenglish"我想把它给我的其他本地人我指定,因为我不能做所有的翻译,它应该回到其他语言的英语例如en.ymlsomegroup:my_tile:"atitleinenglish"my_label:"sometextinenglish"othergroup:...我想发出命令,将整个键和

  3. FIFO实战学习-同步FIFO/异步FIFO-格雷码 - 2

    目录FIFO一.自定义同步FIFO1.1代码设计1.2Testbech1.3行为仿真***学习位宽计算函数$clog2()***$clog2()系统函数使用,可以不关注***分布式资源或者BLOCKBRAM二.异步FIFO2.1在FIFO判满的时候有两种方式:2.2异步FIFO为什么要使用格雷码2.2.1介绍格雷码2.2.2格雷码在异步FIFO中的应用2.2.2格雷码判满2.4二进制与格雷码之间的转换2.4.1二进制码转换为格雷码的方法2.4.2格雷码转换为二进制码的方法2.3实现框图2.5实现及仿真代码2.6仿真图验证2.7结论FIFO  这篇更多的是记录FIFO学习,参考了众多优秀的文章,

  4. DolphinScheduler 调度 DataX 实现 MySQL To ElasticSearch 增量数据同步实践 - 2

    数据同步的方式数据同步的2大方式基于SQL查询的CDC(ChangeDataCapture):离线调度查询作业,批处理。把一张表同步到其他系统,每次通过查询去获取表中最新的数据。也就是我们说的基于SQL查询抽取;无法保障数据一致性,查的过程中有可能数据已经发生了多次变更;不保障实时性,基于离线调度存在天然的延迟;工具软件以Kettle(ApacheHop最新版)、DataX为代表,需要结合任务调度系统使用。基于日志的CDC:实时消费日志,流处理,例如MySQL的binlog日志完整记录了数据库中的变更,可以把binlog文件当作流的数据源;保障数据一致性,因为binlog文件包含了所有历史变更

  5. IGH主站通信测试csp模式(DC同步 preemrt)连通一从站并实现控制 - 2

    IGH主站通信测试linuxcnc配置基础机器人控制LinuxCNC与EtherCAT介绍&&PDO&SDO,搭建环境步骤需要配置IGH主站的查看这篇文章linux系统学习笔记7——一次性安装igh-ethercat主站CSP模式DC同步方式preemrt实时补丁直接上代码,这部分是直接控制使用csp模式控制一个从站运动使能后直接运动,10s,每秒607a(目标位置)增加100.注意:急停按下ESC代码分为两部分,一个是通信线程主要负责和伺服通信,使能伺服,读取和写入寄存器值。第二个是操作线程,负责修改位置的值,和监控按键。使用此代码,首先根据手册1.修改PDO条目,要和自己的伺服一致2.修改

  6. javascript - 为什么 org/arangodb/request 是同步的? - 2

    为什么新的JavaScript模块request同步?它应该只用于作业队列吗?有什么方法可以在ArangoDB中发出异步http(s)请求吗? 最佳答案 完全披露:我是ArangoDB开发团队的一员,主要从事Foxx和所有JavaScript方面的工作。我也是写org/arangodb/request的人模块。ArangoDB是一个不同于Node.js的环境,尽管有许多相似之处(例如使用V8JavaScript引擎)。与Node.js(或浏览器)不同,ArangoDB使用基于线程的并发模型并且没有事件循环。然而,线程并没有在Java

  7. javascript - 本地修改数据的 Firebase 同步 : handling errors & global status - 2

    我有两个关于Firebasewebplatform的相关问题的synchronisationoflocally-modifieddatatotheserver:EveryclientsharingaFirebasedatabasemaintainsitsowninternalversionofanyactivedata.Whendataisupdatedorsaved,itiswrittentothislocalversionofthedatabase.TheFirebaseclientthensynchronizesthatdatawiththeFirebaseserversandw

  8. javascript - 如何同步 Promise 对象? - 2

    我有需要同步工作的promise对象。例如,第二个promise不应该在第一个promise完成之前起作用。如果第一个拒绝第一个必须再次执行。我已经实现了一些示例。这个效果很好。调用getVal,等待2000ms,返回,i++,再次调用getVal.....getVal(){returnnewPromise(function(resolve,reject){setTimeout(function(){resolve(19)},2000);});}asyncpromiseController(){for(vari=0;i但我需要控制一组promise对象。我想做的是我有一个数据,我把它分

  9. javascript - 是否可以中止同步 XmlHttpRequest? - 2

    我编写了一个JavaScript函数,它使用XmlHttpRequest异步调用Web服务。我被要求让这个函数在页面呈现之前完成它的工作。我想我可以使AJAX请求同步,但我不希望这使页面挂起太久-如果未收到响应,我想在1秒后中止请求。是否可以中止同步XmlHttpRequest? 最佳答案 你不能:http://www.hunlock.com/blogs/Snippets:_Synchronous_AJAX说:“同步AJAX(真正的SJAX——同步Javascript和XML)是模态的,这意味着javascript将停止处理您的程序

  10. javascript - 使用 JavaScript Web Workers 的并行编程/同步 - 2

    是否有任何同步原语,如障碍、信号量、锁、监视器,...JavaScript/WebWorkers或者是否有一些可用的库使我能够使用这些东西(我正在考虑Java中的java.util.concurrent之类的东西)?Worker是否具有将它们与线程区分开来的晦涩属性(例如,它们可以与主线程共享内存)?是否有某种限制可以产生多少worker(例如,出于安全原因或其他原因......)?我需要特别注意什么吗? 最佳答案 网络worker没有共享内存的概念;复制线程之间传递的所有消息。话虽如此,您没有屏障、信号量、锁和监视器,因为您在网络

随机推荐