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