底线优先:是否有方法从运行在会话外部的服务器上的脚本中更新会话变量?
Detail:我使用MySQL存储大量用户信息。当用户登录时,我将其中的一些信息存储在$_SESSION中,作为缓存数据的一种方式,以减少选择查询的数量。用户处理数据,所做的任何更改都保存到数据库中。
问题是,当用户使用数据的$_SESSION表示时,数据库上的数据可能会发生变化。在这种情况下,一组更改可以覆盖另一组。在$_SESSION中使用数据时,“锁定”数据库中的数据是不可行的。
在数据“签出”时用$_SESSION id标记数据库,然后更新数据的$_SESSION表示形式(如果脚本对已签出的数据进行更改),这将是相当简单的。我只是不知道可以从会话外部服务器上的脚本中调用什么(如果有的话)来更改会话中的变量。
发布于 2014-03-30 02:40:08
在收到您的评论后,我认为此解决方案将对您有效:
启动会话时,将会话id保存在数据库中:即
<?php
session_start();
$sid = session_id(); // suppose o4lb6s392r2mj1vv6nhlrjfmp1
$_SESSION['user_solr'] = 'admin';
你会得到一根绳子。如果您想要更改会话数据,而不需要刷新用户页面,请执行以下操作以更改用户的会话数据:
<?php
session_id('o4lb6s392r2mj1vv6nhlrjfmp1'); // previous session id
session_start();
$_SESSION['user_solr'] = 'editor';
更新:--这也适用于:
<?php
session_start('o4lb6s392r2mj1vv6nhlrjfmp1'); // previous session id
$_SESSION['user_solr'] = 'editor';
发布于 2014-03-30 02:30:49
将会话存储在数据库中,并使用SQL触发器更新会话表。这样,当用户表被更改时,sql触发器也将更新会话表。
您可以阅读更多内容,并在MySQL文档中看到一些示例。
发布于 2014-03-30 02:18:48
您可以做的是经常向服务器发出Ajax请求,检查会话变量是否已经更新:
将$_SESSION变量放置在隐藏的输入中,并将其发送到服务器。
您的php/html
<form id='formid'>
<input type='hidden' name='name' value='<?php echo $_SESSION['name']; ?>'>
</form>
JS
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文件
<?php
session_start();
$_SESSION["name"] = $_POST["name"];
// etc.
?>
然后,您只需检查$_SESSION变量是否已更改,如果已更改,则更新$_SESSION变量。
https://stackoverflow.com/questions/22742679
复制