Home > php教程 > php手册 > 让token令牌的session永远保持1个

让token令牌的session永远保持1个

WBOY
Release: 2016-06-07 11:45:16
Original
1116 people have browsed it

原来的token是每个页面对应一个session来存放__hash__值,
我的每个页面头部都有一个登录框,用户每访问一个页面就会产生一个token,如果用户一直不提交,那么token就不会自动销毁(除非session过期)。
一个解决方案是通过配置文件,关闭令牌,只有在需要的视图中打开配置参数。
但是我觉得我的网站不需要同时多个页面同时提交表单,而且我使用了session db hander扩展,内存表的char字段长度是有限制的,不可能无限存放那么多token。

所以我决定让用户只能保留一个token。
这样做还有一个好处,可以避免用户多个页面同时提交,刷回复什么的
ThinkPHP/lib/Behavior/TokenBuildBehavior.class.php
搜索// 创建表单令牌<br>     private function buildToken() {<br>         $tokenName  = C('TOKEN_NAME');<br>         $tokenType  = C('TOKEN_TYPE');<br>         if(!isset($_SESSION[$tokenName])) {<br>             $_SESSION[$tokenName]  = array();<br>         }<br>         // 标识当前页面唯一性<br>         $tokenKey   =  md5($_SERVER['REQUEST_URI']);<br>         if(isset($_SESSION[$tokenName][$tokenKey])) {// 相同页面不重复生成session<br>             $tokenValue = $_SESSION[$tokenName][$tokenKey];<br>         }else{<br>             $tokenValue = $tokenType(microtime(TRUE));<br>             $_SESSION[$tokenName][$tokenKey]   =  $tokenValue;<br>         }<br>         $token      =  '<input>';<br>         return $token;<br>     }改为:// 创建表单令牌<br>     private function buildToken() {<br>         $tokenName  = C('TOKEN_NAME');<br>         $tokenType  = C('TOKEN_TYPE');<br> //        if(!isset($_SESSION[$tokenName])) {<br> //            $_SESSION[$tokenName]  = array();<br> //        }<br>         $_SESSION[$tokenName]=array();//生成令牌前清空已有令牌。<br>         // 标识当前页面唯一性<br>         $tokenKey   =  md5($_SERVER['REQUEST_URI']);<br>         if(isset($_SESSION[$tokenName][$tokenKey])) {// 相同页面不重复生成session<br>             $tokenValue = $_SESSION[$tokenName][$tokenKey];<br>         }else{<br>             $tokenValue = $tokenType(microtime(TRUE));<br>             $_SESSION[$tokenName][$tokenKey]   =  $tokenValue;<br>         }<br>         $token      =  '<input>';<br>         return $token;<br>     }这样就可以了。

AD:真正免费,域名+虚机+企业邮箱=0元

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template