0

我有一个页面,我正在向其中发布来自 python 脚本的数据。我正在处理该数据,将数据存储到 SQL 中。我想存储发出此帖子请求的时间。请注意,发布请求是连续发出的。所以会话变量不断变化。好吧,这是一个小代码-

<?PHP
session_start();
include 'db.inc.php';

if(isset($_POST['data']){
$data_decode = (array)json_decode($_POST['data']);
$data_var1 = $data_decode['var1'];
$data_var2 = $data_decode['var2'];
$data_var3 = $data_decode['var3'];
$date = date('Y-m-d H:i:s');
$_SESSION['time'] = $date;  //Set the session with current time
$sql = "UPDATE `table` SET row1=$data_var1, row2=$data_var2 WHERE row3=$data_var3";
$result = mysqli_query($db,$link) or die('Table could not be updated');
echo "Following data inserted: row1=$data_var1, row2=$data_var2, at $_SESSION['time']"; //Echoing the data and time as expected
?>

现在,我在同一个域上有另一个页面,它发出 ajax 请求并每秒从我刚刚插入数据的 SQL 表中取出数据。所以这是整个场景——客户端python脚本向网页发出post请求,用接收到的数据更新sql,设置会话变量。另一个页面同时使用 ajax 获取该数据并显示它。

现在我在另一个页面上调用会话变量,如图所示 -

<?php
session_start();
if(isset($_SESSION['time']){ echo $_SESSION['time']; } //Didn't echoes anything
?>

我曾经<?php print_r($_SESSION) ?>检查会话变量是否设置,它回显“Array()”,这意味着我的会话变量没有设置。所以我的问题是,我做错了什么,我该如何纠正?

4

3 回答 3

4

确保session_start()在每一页的开头调用...

您忘记了声明后的分号。

$_SESSION['time'] = $date

应该

$_SESSION['time'] = $date;
于 2013-04-02T19:36:17.887 回答
1

你忘了 session_start()

<?php
session_start();
if(isset($_SESSION['time']){ echo $_SESSION['time']; } //Didn't echoes anything
?>
于 2013-04-02T19:36:43.230 回答
0

我正在尝试重建哪些组件在您的场景中起作用。

所以首先你提到了一个 Python 脚本。它如何与 PHP 一起工作?它实际上是自己发出 HTTP 请求,还是只将 HTML 发送到浏览器,然后再发送到 PHP?如果 Python 充当 HTTP 客户端,这很重要,因为 PHP 会话使用 cookie,因此您的 Python 脚本必须能够接受“Set-cookie”HTTP 标头并处理它,尤其是在以后的请求中将其发回。

第二个信息是有一些 Ajax 正在进行。这指向一个浏览器和一些 Javascript 作为客户端,这个组合显然能够接受 PHP 设置的任何 cookie。

但是浏览器和 Python 脚本是如何通信的呢?浏览器如何知道 Python 脚本从 PHP 中取回了哪个 cookie,从而可以加载会话数据?

我希望你能看到你方法中的漏洞。将数据从 Python 发布到数据库是一回事,保存此事件的时间可能是全局信息(上次数据库更新的日期),而不是会话信息(每个 Python 客户端不同)。因此,会话是错误的存储位置。另一个障碍是您的 Ajax 客户端无法从您的 Python 客户端共享会话 ID!会话的最后一个缺点:如果它有效,您将不断干扰两个请求,因为会话使用锁定来防止两个请求删除彼此的数据。这尤其糟糕,因为挂起的 Ajax 请求可能会阻止 Python 脚本写入数据库,反之亦然。

找到一种在服务器上存储全局信息的方法。您已经有一个数据库,为什么不使用它呢?

于 2013-04-02T21:20:00.990 回答