我有这样的脚本:
if (isset($_POST['comment_posted'])) {
$user_comment = mysql_real_escape_string($_POST['user_comment']);
$add_user_comment = Event::addUserComment($id,$user->user_id,$user_comment);
}
用户提交评论并刷新页面后,系统会向他显示“您将重新发送帖子数据”警告。如果用户接受,它将重新插入用户评论。
我知道我可以通过添加使用来防止这种情况header
功能并将会员重定向到同一页面。是否可以在不重定向成员的情况下解决此问题?
不,你要么做一个重定向后获取 http://en.wikipedia.org/wiki/Post/Redirect/Get或后续刷新将向用户呈现此对话框。
如果您选择不执行 PRG,您需要以某种方式检测提交是否重复。一种简单的方法是使用随机哈希/数字(例如称为令牌)注入隐藏参数。提交后,您必须检查您期望的令牌(您可能已将其存储在 http 会话中)是否与其他 POST 参数一起发送。有效提交后,您将删除/使该令牌失效。这样,当 POST 发出无法识别的令牌时,它很可能是重复或过期的请求。
如果您正确实施这一点,那么您还将证明您的应用程序csrf http://en.wikipedia.org/wiki/Cross-site_request_forgery攻击。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)