2023年6月21日发(作者:)

实战演习:

核心就3个文件:

1.前端提交发表页面:

2.产生令牌页面:

3.提交处理页面:

1.前端提交发表页面:

1.

2.

3.

4.

5.

6.

7.

8.

提交页面

12.

13.

14.

15.

16. Name:

17.

18.

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.

16. Name:

17.

18.

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了,测试吧!不过验证码也不是毫无用处,比如可以为那些手动提交垃圾信息的人带来阻碍等。大家可以尝试一下,具体情况当然还得具体对待:),不过图片验证码用户体验确实不好,下篇我将介绍简单的计算运算验证码。