Session变量中的值会随机更改,但并非所有实例都更改

时间:2019-02-18 16:46:12

标签: php ajax laravel session centos

我的环境使用Laravel框架,将单个MSSQL数据库用作会话和应用程序数据库驱动程序。应用程序使用单个数据库驱动程序(连接)。

Web服务器和数据库服务器位于不同的虚拟机上。两台服务器都在CentOS(Linux变体)操作系统上运行。

主网页上有一个列表或ID。单击一个ID将打开第二个详细信息网页,该网页向REST API发出AJAX请求。 REST API调用在另一个网络上托管的外部Web服务。 AJAX调用有时可以更快地完成并提供对调用者函数的响应,但在少数情况下需要花费更多时间才能完成。

该网页和REST API是同一应用程序的一部分,并托管在同一服务器实例中。该应用程序没有负载均衡。

当用户访问母版网页并单击ID为1的记录时,首先以编程方式为ID会话变量分配值1,然后进行AJAX调用。当用户返回到母版网页并单击ID为2的记录时,将以编程方式将ID会话变量的值重新分配为2。当我们检索ID会话变量的值时,得到的值为2。

但是,仅在AJAX调用需要更多时间才能完成的情况下,即使我们以编程方式为ID会话变量重新分配了值2,但在检索该值时,有时也会得到值2(预期值)而在其他情况下,我们得到的值是1(意外的,以前的值)。

我们不确定是否由于任何原因未提交或回滚会话变量。

我们也不确定是否与PHP,Laravel,MS SQL Server等任何特定版本有关,而我们认为不是。

任何人都可以抛出一些指针来说明为什么重新分配会话后的值不是新值,而是旧值吗?

1 个答案:

答案 0 :(得分:0)

我认为您的“提交”思想是正确的选择。尝试从SQL打开自动提交:

SET IMPLICIT_TRANSACTIONS OFF

如果那样工作,请再次关闭自动提交,并确保您的代码执行所有正确的提交。

在一个流行的SO问题中对此进行了详细讨论: How do you set autocommit in an SQL Server session?