标题:
thinkphp中令牌的使用方法详解
[打印本页]
作者:
fangzhen
时间:
2009-3-17 13:48
标题:
thinkphp中令牌的使用方法详解
1.首先要开启令牌功能
config.php
内添加如下:
'TOKEN_ON'
=>
true
,
//使用令牌
'TOKEN_NAME'
=>
'think_html_token'
,
// 表单令牌名称,TP会在模板form内自动生成一个隐藏域,
域名
就是这个字符串
'TOKEN_TYPE'
=>
'md5'
,
//令牌加密方式,换用其他加密也可以
2.生成令牌
protected function
saveToken
(){
$tokenType
=
C
(
'TOKEN_TYPE'
);
//获取了config里的'TOKEN_TYPE'配置
$token
=
$tokenType
(
microtime
(
TRUE
));
//这里用md5方法加密了时间,
Session
::
set
(
C
(
'TOKEN_NAME'
),
$token
);
}
// 验证令牌
protected function
isValidToken
(
$reset
=
false
){
$tokenName
=
C
(
'TOKEN_NAME'
);
if(
$_REQUEST
[
$tokenName
]==
Session
::
get
(
$tokenName
)){
$valid
=
true
;
$this
->
saveToken
();
}else {
$valid
=
false
;
if(
$reset
)
$this
->
saveToken
();
}
return
$valid
;
}
3.案例演示
View里有Form,并且config里开启了令牌的话,在生成缓存文件的时候,会自动加一个隐藏域,代码如下:
<?
php
if(
C
(
"TOKEN_ON"
)):
?>
<input type="hidden" name="
<?php
echo
C
(
"TOKEN_NAME"
);
?>
" value="
<?php
echo
Session
::
get
(
C
(
"TOKEN_NAME"
));
?>
"/>
<?php
endif;
?>
这时候在XxxAction.clas.php文件内,在display含有表单的页面之前,调用一下saveToken()方法,并且在接受页面调用isValidToken()方法,就OK了,下面是我的IndexAction.class.php测试代码。
<?
php
class
IndexAction
extends
Action
{
public function
index
(){
$this
->
saveToken
();
$this
->
display
();
}
public function
checktoken
(){
if(
$this
->
isValidToken
()){
echo
'提交成功!'
;
}
else{
echo
'不能重复提交啦!'
;
}
}
}
?>
欢迎光临 PHP开发笔记 (http://phpvi.com/)
Powered by Discuz! 6.1.0