我有一个 PHP 应用程序,我希望某些对象以下列方式持久存在:
- 该对象不得存在于 $_SESSION 中。单独的 Web 浏览器窗口必须控制对象的单独实例。
- 最终用户不能通过手动更改 $_REQUEST 变量的内容来修改对象(如果发生这种情况,则应将请求视为已损坏)。
是否有最佳实践/正确的方法来做到这一点?随着 PHP 变得越来越面向对象,我担心我正在重新发明轮子。
这段代码的主要目的是允许在不使用数据库的情况下创建和操作复杂对象,直到它们被提交,然后我将使用适当的事务将它们完全提交到数据库。我想让我的数据库只包含完整的发票,或者根本不包含发票。
我目前的方法如下:
<?php
include('encrypt.php');
include('invoice.class.php');
if(isset($_REQUEST['invoice']))
{
$invoice = unserialize(decrypt(base64_decode($_REQUEST['invoice'])));
if(!($invoice instanceOf invoice)) throw new exception('Something bad happened');
}
else
{
// Some pages throw an exception if the $_REQUEST doesn't exist.
$invoice = new invoice();
}
if(isset($_REQUEST['action']) && $_REQUEST['action'] == 'addLine')
{
$invoice->addLine(new invoiceLine($_REQUEST['description'], $_REQUEST['qty'], $_REQUEST['unitprice']);
}
?>
<form action="index.php" method="post">
<input type="text" name="qty" />
...
<input type="hidden" name="invoice" value="<?php echo(base64_encode(encrypt(serialize($invoice)))); ?>" />
</form>