0

我是 PHP 新手,为了学习语言和概念,我正在使用购物车等的电子商务网站上工作。在这个网站上,我有项目,当单击项目时,商品通过 GET 方法发送到购物车页面。使用此 ID,我将项目添加到购物车(数据库中的表),它工作正常。

<a href="do_shoppingcart.php?id=<?php echo "$itm_id"; ?>">

问题是;如果用户单击刷新按钮,该商品将再次添加到购物车中。您认为禁用刷新按钮或 F5 按钮是一个不错的选择吗?当页面刷新时,我必须怎么做才能防止用户将商品添加到购物车?在表单中,我注意到 "(isset($_POST['Submit'])){}" 很有帮助,但对于 GET 方法,这不起作用。

感谢您的帮助。

4

2 回答 2

0

最安全的方法(也有助于防止 CSRF 攻击)是将令牌作为隐藏字段添加到表单中。然后,在处理脚本中,如果该令牌尚不存在,则仅将该项目添加到数据库中......

令牌可以通过以下方式创建:

$token = sha1(uniqid());

附加到您的链接:

echo '<a href="process.php?id='.$id.'&token='.$token;

然后,在处理时,您在数据库中查询带有该标记的行。

SELECT 1 FROM table WHERE token='abc....'

如果此查询返回结果,则不要处理其他任何内容...

于 2009-12-01T14:51:32.557 回答
-1

您应该使用 POST 进行破坏性操作,将 GET 保留用于幂等操作。

于 2009-12-01T14:49:30.467 回答