1

我正在尝试使用codeigniter和jquery构建一个登录表单,当客户端提交表单时我试图做的是jquery在传递和参数ENCRYPTEDwindow.location时更改调用验证函数controllersusernamepassword

这是我的代码

window.location.href = "/resturant/codeigniter/index.php/welcome/checklogin/" +
<?php $this->load->library('encrypt');
echo $this->encrypt->encode("$('#username').val()"); ?> +
"/" + $("#password").val();

此代码不起作用。

我的问题是,这就是我们加密参数并通过 url 传递它们的方式吗?

更新

以下代码工作正常:

window.location.href = "/resturant/codeigniter/index.php/welcome/checklogin/" +
<?php echo "$('#username').val()"; ?> + "/" + $("#password").val();
4

1 回答 1

0

您正在以一种完全不可能的方式混合 PHP 和 JavaScript。PHP在服务器上执行,内容被发送到浏览器,然后,很长一段时间后,JavaScript 在客户端机器上运行。两者不能以这种方式互动。为了让 PHP 和 JavaScript 完全交互,必须通过 HTTP 请求在客户端和服务器之间发送数据。

在更大的方案中,您不能使用 PHP 中的服务器端加密来加密 JavaScript 中的客户端。如果您希望从 JavaScript 安全地与服务器进行通信,则需要使用 SSL。

如果您只是试图将用户名/密码保留在 URL 之外,则应该使用POST请求而不是GET请求。无论如何,您都应该为登录用户执行此操作。

回复:你的更新

问题在于,纯属意外,您的第二个示例输出了有效的 JavaScript,恰好为您提供了所需的结果。

也就是说,在您的第二个示例中:

window.location.href = "/resturant/codeigniter/index.php/welcome/checklogin/" +
<?php echo "$('#username').val()"; ?> + "/" + $("#password").val();

PHPecho正在输出一个包含 的静态字符串"$('#username').val()"而不是#username字段中尚不存在的值,因为我们在 PHP 中,此时甚至没有涉及浏览器。PHP 的输出将如下所示,巧合的是,它可以正常工作:

window.location.href = "/resturant/codeigniter/index.php/welcome/checklogin/" +
$('#username').val() + "/" + $("#password").val();

但是,您的第一个示例完全被破坏了。这一行:

echo $this->encrypt->encode("$('#username').val()");

正在输出文字字符串的加密形式"$('#username').val()";结果将是垃圾和 JavaScript 解析错误。

不能像这样混合 PHP 和 JavaScript。

于 2013-01-06T16:09:07.803 回答