thinkPHP中验证码的简单实现方法_php实例_脚本之家

2020-02-15 08:35栏目:bob体育平台
TAG:

本文实例讲述了thinkPHP中验证码的简单实现方法。分享给大家供大家参考,具体如下:

PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】,提醒功能thinkphp

本文实例讲述了PHP实现用户异地登录提醒功能的方法。分享给大家供大家参考,具体如下:

对于安全性要求比较高的web网站,特别是后台管理,有时候需要甄别自己的账号是否被盗或者是否有另一个人此刻登陆了在进行后台操作,这些都会很不安全,为了避免两个人同时登录同时操作,可以强制下线一个账号。

通过IP判断当然是不行的,因为IP是随时会在某一个网段内变化的,但是有一个机制,恰巧可以解决这个,那就是session,只要使用同一个浏览器访问网站,浏览器不关闭每个来访者的session_id是不变的,这也正是解决这个问题需要的。

以TP框架搭建的网站后台为例,思路如下:

(1)数据库用户表

在user表中,增加一个字段`session_id` varchar(32),用来存放登录之后的session_id。

(2)用户登录

用户登录,就是正常的判断账号密码以及验证码,当这些都验证通过的时候,取出当前的session_id存入数据库user表中。

M('user')->where(array('id'=>$_SESSION['uid']))->save(array('session_id'=>session_id()));

(3)解决异地登录问题

对于后台操作,为了便于验证和操作安全,基本都会先创建一个基础控制器BaseController,然后后台的其他操作控制器都继承这个基础控制器。对于后台的每一步操作之前,用户状态的检测都放在BaseController控制器的初始化_initialize()方法中。

现在在_initialize()方法中,除了验证用户登录状态是否被锁定等等,还要取出本地session_id和存放在user表中的session_id进行比对,如果对不上那么表名账号在异地有登陆,这时候可以迫使强制下线,退回到登录页面。

$user = M('user')->where(array('id'=>$_SESSION['uid']))->find();
$session_id = session_id();
if($user['session_id'] != $session_id){
 session_destroy();
 $this->error('您的账号在其他地方登录,您已经被强制下线', U('login'));
}

当然也可以获取到异地登陆的IP,给出提醒:

图片 1

更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

本文实例讲述了PHP实现用户异地登录提醒功能的方法。分享给大...

本文实例讲述了thinkPHP显示不出验证码的原因与解决方法。分享给大家供大家参考,具体如下:

1.php端生成验证码函数

今天到公司,svn update代码后,在浏览器上输入域名后,在验证码那块显示不出,找了半个上午,后来仔细看了下apache的配置文件

public function verify(){ // 验证码 import; Image::buildImageVerify(4,1,'png',40,20,'verify');}/*** 生成图像验证码* @static* @access public* @param string $length 位数* @param string $mode 类型* @param string $type 图像格式* @param string $width 宽度* @param string $height 高度* @return string*/static function buildImageVerify($length=4, $mode=1, $type='png', $width=48, $height=22, $verifyName='verify') { import; $randval = String::randString; session($verifyName, md5; $width =  > $width ? $length * 10 + 10 : $width; if ($type != 'gif' && function_exists('imagecreatetruecolor')) { $im = imagecreatetruecolor; } else { $im = imagecreate; } $r = Array; $g = Array; $b = Array; $key = mt_rand; $backColor = imagecolorallocate($im, $r[$key], $g[$key], $b[$key]); //背景色 $borderColor = imagecolorallocate; //边框色 imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $backColor); imagerectangle($im, 0, 0, $width - 1, $height - 1, $borderColor); $stringColor = imagecolorallocate, mt_rand, mt_rand; // 干扰 for ($i = 0; $i < 10; $i++) { imagearc($im, mt_rand, mt_rand, mt_rand, mt_rand, 55, 44, $stringColor); } for ($i = 0; $i < 25; $i++) { imagesetpixel($im, mt_rand, mt_rand, $stringColor); } for ($i = 0; $i < $length; $i++) { imagestring($im, 5, $i * 10 + 5, mt_rand, $randval{$i}, $stringColor); } Image::output;}
 ServerName admin.exam.com DocumentRoot E:/www/exam/trunk/server/Admin/  Options FollowSymLinks AllowOverride all Order deny,allow allow from all Satisfy all 

生成图片的同时,传入到session中。

原来是DocumentRoot和Directory不一致

版权声明:本文由bob体育app发布于bob体育平台,转载请注明出处:thinkPHP中验证码的简单实现方法_php实例_脚本之家