发送没有隐藏输入的表单数据

时间:2014-01-06 18:36:16

标签: javascript php jquery html session

到目前为止,我一直在使用以下方法将表单数据发送到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
?>

我的问题是,大多数网站如何在不使用隐藏输入的情况下发送表单数据?我听说使用会话有效,但我不确定如何。

感谢。

2 个答案:

答案 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_encryptmcrypt_decrypt,您应该安装一个包php5-mcrypt。在类似Ubuntu的系统上,可以通过以下命令完成:

sudo apt-get install php5-mcrypt