到目前为止,我一直在使用以下方法将表单数据发送到PHP文件(通过Ajax)。这样做的问题是仍然可以在源代码中查看“隐藏”输入,以显示我不想被用户看到的数据:
HTML:
<form>
<input name="user_field">
<input name="user_id_field" hidden>
<button type="submit">Submit</button>
</form>
的JQuery / AJAX:
$(document).ready(function() {
$(document).on("submit", "form", function(event) {
event.preventDefault();
$.ajax({
url: 'php/verification.php',
type: 'POST',
dataType: 'json',
data: $(this).serialize(),
success: function(data) {
alert(data);
}
});
});
});
PHP:
<?php
$user = $_POST['user_field'];
$user_id = $_POST['user_id_field'];
// verification code and echo back to document
?>
我的问题是,大多数网站如何在不使用隐藏输入的情况下发送表单数据?我听说使用会话有效,但我不确定如何。
感谢。
答案 0 :(得分:3)
在用户初始登录时,为会话剩余部分建立会话和用户ID:
<强> router.php 强>
session_start();
/* once user has authenticated */
$_SESSION['user_id_field'] = $userid;
<强> subsequentpages.php 强>
session_start();
/* assign user id to local variable */
$userid = $_SESSION['user_id_field'];
... do your stuff
每个页面实例化一个会话并分配一个仅对该页面可用的局部变量。
答案 1 :(得分:0)
AFAIK是不可能的,因为用户可以访问发送到浏览器的任何数据。做你想做的事的唯一方法是加密数据。
以下是我用于此的代码:
define('CRYPT_KEY', 'some_secret_key');
function dataEncrypt($data) {
$crypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, CRYPT_KEY, $data, 'ecb');
$base64 = base64_encode($crypt);
return $base64;
}
function dataDecrypt($data) {
$crypt = base64_decode($data);
$str = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, CRYPT_KEY, $crypt, 'ecb'), "\0\4");
return $str;
}
CRYPT_KEY
是您自己的随机字符串
<强>更新强>
要使用mcrypt_encrypt
和mcrypt_decrypt
,您应该安装一个包php5-mcrypt
。在类似Ubuntu的系统上,可以通过以下命令完成:
sudo apt-get install php5-mcrypt