首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据库更改时更新PHP会话变量

数据库更改时更新PHP会话变量
EN

Stack Overflow用户
提问于 2014-03-30 10:05:54
回答 3查看 2.6K关注 0票数 0

底线优先:是否有方法从运行在会话外部的服务器上的脚本中更新会话变量?

Detail:我使用MySQL存储大量用户信息。当用户登录时,我将其中的一些信息存储在$_SESSION中,作为缓存数据的一种方式,以减少选择查询的数量。用户处理数据,所做的任何更改都保存到数据库中。

问题是,当用户使用数据的$_SESSION表示时,数据库上的数据可能会发生变化。在这种情况下,一组更改可以覆盖另一组。在$_SESSION中使用数据时,“锁定”数据库中的数据是不可行的。

在数据“签出”时用$_SESSION id标记数据库,然后更新数据的$_SESSION表示形式(如果脚本对已签出的数据进行更改),这将是相当简单的。我只是不知道可以从会话外部服务器上的脚本中调用什么(如果有的话)来更改会话中的变量。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-30 10:40:08

在收到您的评论后,我认为此解决方案将对您有效:

启动会话时,将会话id保存在数据库中:即

代码语言:javascript
运行
复制
<?php
session_start();
$sid = session_id(); // suppose o4lb6s392r2mj1vv6nhlrjfmp1
$_SESSION['user_solr'] = 'admin';

你会得到一根绳子。如果您想要更改会话数据,而不需要刷新用户页面,请执行以下操作以更改用户的会话数据:

代码语言:javascript
运行
复制
<?php
session_id('o4lb6s392r2mj1vv6nhlrjfmp1'); // previous session id
session_start();
$_SESSION['user_solr'] = 'editor';

更新:--这也适用于:

代码语言:javascript
运行
复制
<?php
session_start('o4lb6s392r2mj1vv6nhlrjfmp1'); // previous session id
$_SESSION['user_solr'] = 'editor';
票数 2
EN

Stack Overflow用户

发布于 2014-03-30 10:30:49

将会话存储在数据库中,并使用SQL触发器更新会话表。这样,当用户表被更改时,sql触发器也将更新会话表。

您可以阅读更多内容,并在MySQL文档中看到一些示例。

票数 1
EN

Stack Overflow用户

发布于 2014-03-30 10:18:48

您可以做的是经常向服务器发出Ajax请求,检查会话变量是否已经更新:

将$_SESSION变量放置在隐藏的输入中,并将其发送到服务器。

您的php/html

代码语言:javascript
运行
复制
<form id='formid'>
<input type='hidden' name='name' value='<?php echo $_SESSION['name']; ?>'>
</form>

JS

代码语言:javascript
运行
复制
window.setInterval($("#formid").submit());

$("#formid").submit(function(){
   $.ajax({
      type: "POST",
      url: "someFileToUpdateTheSession.php",
      data: $(this).serialize(),
      success: function(){
          // Do what you want to do when the session has been updated
      }
   });

   return false;
});

其他php文件

代码语言:javascript
运行
复制
<?php
   session_start();
   $_SESSION["name"] = $_POST["name"];
   // etc.
?>

然后,您只需检查$_SESSION变量是否已更改,如果已更改,则更新$_SESSION变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22742679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档