【问题标题】:Pass PHP variable to Ajax without hidden input在没有隐藏输入的情况下将 PHP 变量传递给 Ajax
【发布时间】:2012-02-19 19:36:13
【问题描述】:

我有一个接收用户消息并将其发送给收件人的表单。在 PHP 方面,我有三个变量:$senderid$recipientid$messageid。到目前为止,我一直在公司上使用隐藏输入,例如

<input type="hidden" id="senderid" value="<?php echo $senderid; ?>" />
<input type="hidden" id="recipientid" value="<?php echo $recipientid; ?>" />
<input type="hidden" id="messageid" value="<?php echo $messageid; ?>" />
<textarea id="message" name="message" rows="5" cols="10"></textarea>

我正在使用VAR SENDERID = $('#senderid').val(); 等等来将其传递给 Ajax 脚本。这工作正常。我不喜欢的是隐藏的输入,即使它是隐藏的,也可以更改。有人可以通过 Firebug 更改 $senderid$recipientid$messageid 的值。如果有人这样做,那将完全搞砸我的消息系统。有没有其他方法可以在不使用隐藏输入的情况下将变量传递给 Ajax?

【问题讨论】:

  • 客户端将始终能够编辑 HTML/JavaScript。您需要实现服务器端验证。
  • 为什么不使用会话变量?
  • 来自客户端的任何内容,如果不加以检查,可能会破坏您的系统。如果您需要确保发件人是他所说的那个人,该变量应该保留在服务器端,可能在 $_SESSION 变量中。
  • 您应该有一个检查服务器端,以确保伪造 id 不会与您的系统发生冲突。发布您的 ajax 代码,我会尝试帮助。
  • 嗯,将隐藏的值存储在 javascript 变量中? 除非您也想允许没有 javascript 的用户提交表单(这将意味着 Ajax 一开始就无法工作)。另外,请注意,因为正如@spidEY 提到的,客户端验证是不够的......

标签: php ajax


【解决方案1】:

没有简单的方法可以做到这一点。您可以将其作为 javascript 变量传递,或者以某种方式散列的事件,例如带sha功能。但我建议你重新考虑你做事的方式。

例如,如果这是给其他用户的消息表单,您可以有以下内容:

  • senderid,我假设这是当前的登录用户,因此您可以从会话中获取它。
  • recipientid,您可以将其作为隐藏输入,但在您的控制器(或您发送消息的功能)中,您可以检查当前用户是否实际上被允许向收件人发送消息(例如,如果收件人在朋友列表中)。

无论如何,永远不要相信从浏览器提交的数据。

【讨论】:

  • 感谢您的建议。
猜你喜欢
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
相关资源
最近更新 更多