2023年6月21日发(作者:)
实战演习:
核心就3个文件:
1.前端提交发表页面:
2.产生令牌页面:
3.提交处理页面:
1.前端提交发表页面:
1.
2.
3.
4.
5.
6.
7.
8.
12.
13.
14.
15.
19.
20.
21.
这里用jQuery实现AJAX,在页面加载完毕后从获取“令牌”,相当于获取验证码图片。
上面的令牌从下面的文件获取
2.产生令牌页面:
1.
2. $token = $_SERVER['REQUEST_TIME'];
3. //把时间戳与自定义字符串(我这里用的’ieliwb’)拼接后进行md5加密,并存入cookie
4. //参数0说明该cookie随浏览器关闭而失效
5.
6. setcookie(‘token‘,md5(‘ieliwb‘.$token), 0, ‘/‘);
7. 8. //在产生“令牌”时可以加上防止缓存的代码
9. # ‘Expires’ in the past
10. header(“Expires: Mon, 26 Jul 1997 05:00:00 GMT“);
11. # Always modified
12. header(“Last-Modified: “.gmdate(“D, d M Y H:i:s“).“ GMT“);
13. # HTTP/1.1
14. header(“Cache-Control: no-store, no-cache, must-revalidate“);
15. header(“Cache-Control: post-check=0, pre-check=0“, false);
16. # HTTP/1.0
17. header(“Pragma: no-cache“);
18. //输出到隐藏的表单
19. echo $token;
20. ?>
3.提交处理页面:
1.
2.
3.
4.
$proceed = false;
$seconds = 60*10;//令牌有效时间
if(isset($_POST['ts']) && isset($_COOKIE['token']) && $_COOKIE['token'] ==
md5(‘ieliwb‘.$_POST['ts']))
5. {
6. $proceed = true;
7. }
8. if(!$proceed)
9. {
10. die(‘令牌错误!‘);
11. }
12. /**
13. if(!isset($_POST['ts']) || empty($_POST['ts'])) {
14. die(‘你是机器人吧’);
15. }
16. if(!isset($_COOKIE['token'])) {
17. die(‘父令牌丢失’);
18. }
19. if(md5(‘ieliwb’.$_POST['ts']) != $_COOKIE['token']) {
20. die(‘令牌错误’);
21. }
22. */
23. if(((int)$_POST['ts'] + $seconds) < $_SERVER['REQUEST_TIME'])
24. {
25. die(‘令牌已失效‘);
26. }
27. echo ‘
Testing:
Cookie: ‘.$_COOKIE['token'].‘
Timestamp:
‘. $_POST['ts'].‘
‘; 28. echo ‘Success!
Here is what you sent:‘;
29. print_r($_POST);
30.
31. ?>
到此全部ALL了,测试吧!不过验证码也不是毫无用处,比如可以为那些手动提交垃圾信息的人带来阻碍等。大家可以尝试一下,具体情况当然还得具体对待:),不过图片验证码用户体验确实不好,下篇我将介绍简单的计算运算验证码。
2023年6月21日发(作者:)
实战演习:
核心就3个文件:
1.前端提交发表页面:
2.产生令牌页面:
3.提交处理页面:
1.前端提交发表页面:
1.
2.
3.
4.
5.
6.
7.
8.
12.
13.
14.
15.
19.
20.
21.
这里用jQuery实现AJAX,在页面加载完毕后从获取“令牌”,相当于获取验证码图片。
上面的令牌从下面的文件获取
2.产生令牌页面:
1.
2. $token = $_SERVER['REQUEST_TIME'];
3. //把时间戳与自定义字符串(我这里用的’ieliwb’)拼接后进行md5加密,并存入cookie
4. //参数0说明该cookie随浏览器关闭而失效
5.
6. setcookie(‘token‘,md5(‘ieliwb‘.$token), 0, ‘/‘);
7. 8. //在产生“令牌”时可以加上防止缓存的代码
9. # ‘Expires’ in the past
10. header(“Expires: Mon, 26 Jul 1997 05:00:00 GMT“);
11. # Always modified
12. header(“Last-Modified: “.gmdate(“D, d M Y H:i:s“).“ GMT“);
13. # HTTP/1.1
14. header(“Cache-Control: no-store, no-cache, must-revalidate“);
15. header(“Cache-Control: post-check=0, pre-check=0“, false);
16. # HTTP/1.0
17. header(“Pragma: no-cache“);
18. //输出到隐藏的表单
19. echo $token;
20. ?>
3.提交处理页面:
1.
2.
3.
4.
$proceed = false;
$seconds = 60*10;//令牌有效时间
if(isset($_POST['ts']) && isset($_COOKIE['token']) && $_COOKIE['token'] ==
md5(‘ieliwb‘.$_POST['ts']))
5. {
6. $proceed = true;
7. }
8. if(!$proceed)
9. {
10. die(‘令牌错误!‘);
11. }
12. /**
13. if(!isset($_POST['ts']) || empty($_POST['ts'])) {
14. die(‘你是机器人吧’);
15. }
16. if(!isset($_COOKIE['token'])) {
17. die(‘父令牌丢失’);
18. }
19. if(md5(‘ieliwb’.$_POST['ts']) != $_COOKIE['token']) {
20. die(‘令牌错误’);
21. }
22. */
23. if(((int)$_POST['ts'] + $seconds) < $_SERVER['REQUEST_TIME'])
24. {
25. die(‘令牌已失效‘);
26. }
27. echo ‘
Testing:
Cookie: ‘.$_COOKIE['token'].‘
Timestamp:
‘. $_POST['ts'].‘
‘; 28. echo ‘Success!
Here is what you sent:‘;
29. print_r($_POST);
30.
31. ?>
到此全部ALL了,测试吧!不过验证码也不是毫无用处,比如可以为那些手动提交垃圾信息的人带来阻碍等。大家可以尝试一下,具体情况当然还得具体对待:),不过图片验证码用户体验确实不好,下篇我将介绍简单的计算运算验证码。
发布评论