当前位置: 首页 > 图文教程 > 网络编程 > PHP > php生成SessionID和图片校验码的思路和实现代码

PHP
用PHP构建一个留言本
用PHP实现通过Web执行C/C++程序
PHP百行代码快速构建简易聊天室
FC4下安装plog快速指南(plog版本:1.01)
一个简单的PHP投票程序
采用行写方式的聊天程序(之四)
PHP对象编程实现3D饼图
可以文本显示的公告栏
采用行写方式的聊天程序(之五)
一个可分页的基于文本的PHP留言板
PHP用户认证及管理完全源码
初学者的留言簿
一个很简单的PHP的后端脚本,能够从(某个网中)得到最新新闻。
是一个设计将LinuxFreak.org新闻标题放置到你的网站的PHP脚本程序。
如何用php作线形图的函数
简单用户注册程序
一个浏览器检查类
用PHP+MYSQL实现论坛里的分级+分页显示
判断ICQ是否在线的代码
PHP的FDF文档支持

PHP 中的 php生成SessionID和图片校验码的思路和实现代码


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 118 ::
收藏到网摘: n/a

做一个后台登陆需要用到校验码,前台的用户跟踪需要用到SessionID,当然,默认的PHP开启了Session以后就有了一个SessionID,但是我需要自己的,并且能够存储进数据库,那么我就尝试了一下,构造了以下的函数。 /****** 产生Session ID ******/
基本的思路: 是把当前微秒的时间获取, 然后产生以个随机数字, 把随机数字和当前时间相加后加密一下, 最后再截取需要的长度
/*
函数名称:create_sess_id()
函数作用:产生以个随机的会话ID
参 数:$len: 需要会话字符串的长度,默认为32位,不要低于16位
返 回 值:返回会话ID
函数作者:heiyeluren
*/
function create_sess_id($len=32)
{
// 校验提交的长度是否合法
if( !is_numeric($len) || ($len>32) || ($len<16)) { return; }
// 获取当前时间的微秒
list($u, $s) = explode(' ', microtime());
$time = (float)$u + (float)$s;
// 产生一个随机数
$rand_num = rand(100000, 999999);
$rand_num = rand($rand_num, $time);
mt_srand($rand_num);
$rand_num = mt_rand();
// 产生SessionID
$sess_id = md5( md5($time). md5($rand_num) );
// 截取指定需要长度的SessionID
$sess_id = substr($sess_id, 0, $len);
return $sess_id;
}

/****** 产生校验码 ******/
思路: 这个思路比较简单,因为考虑独一无二和随机性,我们的校验码就Session ID里面截取一段字符串就可以了,因为我们的SessionID是充分考虑了独一无二的。
/*
函数名称:create_check_code()
函数作用:产生以个随机的校验码
参 数:$len: 需要校验码的长度, 请不要长于16位,缺省为4位
返 回 值:返回指定长度的校验码
函数作者:heiyeluren
*/
function create_check_code($len=4)
{
if ( !is_numeric($len) || ($len>6) || ($len<1)) { return; }
$check_code = substr(create_sess_id(), 16, $len );
return strtoupper($check_code);
}

/****** 生成校验码的图片 ******/
这个就是一些比较简单的PHP图像编程的东西了,我作的图片和简单。
/*
函数名称:create_check_image()
函数作用:产生一个校验码的图片
参 数:$check_code: 校验码字符串,一般由create_check_code()函数来获得
返 回 值:返回该图片
函数作者:heiyeluren
*/
function create_check_image( $check_code )
{
// 产生一个图片
$im = imagecreate(65,22);
$black = ImageColorAllocate($im, 0,0,0); // 背景颜色
$white = ImageColorAllocate($im, 255,255,255); // 前景颜色
$gray = ImageColorAllocate($im, 200,200,200);
imagefill($im,68,30,$gray);
// 将四位整数验证码绘入图片
imagestring($im, 5, 8, 3, $check_code, $white);
// 加入干扰象素
for($i=0;$i<200;$i++)
{
$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($im, rand()%70 , rand()%30 , $randcolor);
}
// 输出图像
Header("Content-type: image/PNG");
ImagePNG($im);
ImageDestroy($im);
}
这里我们要注意,引用create_check_image()函数的时候,必须在一个单独的文件里,因为输出文件头的时候输出的格式是图像格式,夹杂其他内容,会导致图片无法显示。另外,图片成生函数,你是可以更改的,比如你想改颜色,那么你就把前景色和背景色的生成位置换一下,那么颜色就不一样了,同时也要把校验码的颜色换了,不然背景和校验码都是黑色就显示不出来了。