Drupal 7 开发内部培训资料, 分头诗人

D7表单中几个hidden有什么作用

赞成!
1
否决!

由于要自定义搜索、登录等东西,所以我的page.tpl.php这样写的代码

其中search-block-form.tpl.php改成了这样(只输出hidden部分,因为输入框和按钮我自己写到page.tpl.php中了)

hidden部分会生成这两个value为一长串编码的东西(下图是search模块生成的,登录模块也会生成类似的东西)

我发现,对于search去掉了value为一长串编码的东西后,搜索无法正常工作。

但是对于登录模块,去掉了value为一长串编码的东西后,任然可以实现登录(正如我page.tpl.php里写的)。

1.所以我先请问下那个value为一长串编码的东西到底有什么作用,是不是为区分多站点准备的类似id的东西?

2.这一长串编码是一旦生成就不会改变,还是定期会自动改变?

4 个回答

赞成!
0
否决!

虽然学Drupal已经4个多月,但依然是初学者,所以下面说的不一定正确:

Drupal安装的时候,会生成一个drupal_private_key,存储于variable表。生成drupal表单的时候,系统会根据这个值生成form_token(pseudo-random伪随机令牌值)和form_build_id,这两个值应该是唯一的。表单提交的时候系统会验证它,以确保是Drupal自己生成的表单,已此来提高安全性,防止非法表单提交。

赞成!
0
否决!

#build_id
该属性是一个字符串(MD5哈希)。#build_id用来标识一个特定的表单实例。它作为一个隐藏域放在表单中,通过使用drupal_prepare_form()来设置这个表单元素,如下所示:
 

$form['form_build_id'] = array(
'#type' => 'hidden',
'#value' => $form['#build_id'],
'#id' => $form['#build_id'],
'#name' => 'form_build_id',
);


#token
这个字符串(MD5哈希)是一个唯一的令牌,每个表单中都带有它,通过该令牌Drupal能够判定一个表单是一个实际的Drupal表单,而不是一个恶意用户修改后的。

赞成!
0
否决!

诗人说的对!学习了!

一个站点里,每个form的form_token值都是唯一的

赞成!
0
否决!

学习了,谢谢诗人和antims!