PHP将$ _SESSION变量从服务器插入/更新到用户会话中

时间:2018-10-19 21:11:39

标签: php session session-variables

所以这是场景: 我有处于活动状态的用户SID存储在数据库中,我想在用户会话中更改/设置$ _SESSION变量。我确实知道还有其他方法(例如Ajax等)来完成同一件事,但是现在我非常想知道是否有一种方法可以完成这项工作。

这就是我要尝试的,用户SessionID = 1234567890代码,每15秒刷新一次:

if (isset($_SESSION['Message'])) {
    $msg=$_SESSION['Message'];
    $alert= "<br><script type='text/javascript'>alert('$msg');</script><br>";
    unset($_SESSION['Message']);
} else {
    $alert="<br>'Message' is NOT set.<br>";
}

然后我在服务器上运行它:

<?php
session_id('1234567890');
session_start();
$_SESSION['Message']="Hello!";
?>

结果是用户会话挂起刷新,而不是弹出警报。

从我阅读的文档来看,这似乎并未特别排除,但是我可以看到它可能引起轻微的安全问题。在这种情况下,我没有任何安全隐患。

那么,有什么办法可以做到这一点?

2 个答案:

答案 0 :(得分:0)

您可能正在遇到一个称为“会话阻止”的问题。

如果PHP脚本正在运行,它将在文件系统级别锁定其当前会话对象。其他调用具有相同ID的start_session的PHP脚本将被阻塞,直到第一个脚本释放了锁。

为避免这种情况,只要您确定当前脚本不需要将更多数据存储到会话文件中,就可以尝试将session_write_close();添加到脚本中。

此后,您仍然可以在脚本执行期间读取会话,但不再写入。

答案 1 :(得分:0)

在CLI中运行PHP时,未设置session_path。您需要执行session_save_path()方法并告知会话文件应位于的位置。

例如:

bash# ls -al /var/www/tmp/sess_julp8r943vmbv18lhi651beu03
-rw------- 1 apache apache 19 Jun 20 21:09 /var/www/tmp/sess_julp8r943vmbv18lhi651beu03
bash# php -q
<?php
session_id ( "julp8r943vmbv18lhi651beu03");
session_start ();
var_dump ( $_SESSION);
?>
array(0) {
}
bash# php -q
<?php
session_save_path ( "/var/www/tmp");
session_id ( "julp8r943vmbv18lhi651beu03");
session_start ();
var_dump ( $_SESSION);
?>
array(1) {
  ["message"]=>
  string(7) "Hello there!"
}