用户
 找回密码
 入住 CI 中国社区
搜索
查看: 5717|回复: 9
收起左侧

[已解决] 获取不到验证码的值!求救

[复制链接]
发表于 2011-11-4 16:26:24 | 显示全部楼层 |阅读模式
本帖最后由 125424334 于 2011-11-4 16:27 编辑
PHP复制代码
 
验证码类
<?php
class Captcha_code
{
var $width='60';
var $num='4';
var $height='20';
var $name='randcode';
public function __construct($conf="")
{
  if($conf!="")
  {
   foreach($conf as $key=>$value)
   {
    $this->$key=$value;
   }
  }
}
 
function show()
{
  Header("Content-type: image/gif");
  /*
  * 初始化
  */

  $border = 0; //是否要边框 1要:0不要
  $how = $this->num; //验证码位数
  $w = $this->width; //图片宽度
  $h = $this->height; //图片高度
  $fontsize = 5; //字体大小
  $alpha = "abcdefghijkmnopqrstuvwxyz"; //验证码内容1:字母
  $number = "023456789"; //验证码内容2:数字
  $randcode = ""; //验证码字符串初始化
  srand((double)microtime()*1000000); //初始化随机数种子
 
  $im = ImageCreate($w, $h); //创建验证图片
 
  /*
  * 绘制基本框架
  */

  $bgcolor = ImageColorAllocate($im, 255, 255, 255); //设置背景颜色
  ImageFill($im, 0, 0, $bgcolor); //填充背景色
  if($border)
  {
   $black = ImageColorAllocate($im, 0, 0, 0); //设置边框颜色
   ImageRectangle($im, 0, 0, $w-1, $h-1, $black);//绘制边框
  }
 
  /*
  * 逐位产生随机字符
  */

  for($i=0; $i<$how; $i++)
  {  
   $alpha_or_number = mt_rand(0, 1); //字母还是数字
   $str = $alpha_or_number ? $alpha : $number;
   $which = mt_rand(0, strlen($str)-1); //取哪个字符
   $code = substr($str, $which, 1); //取字符
   $j = !$i ? 4 : $j+15; //绘字符位置
   $color3 = ImageColorAllocate($im, mt_rand(0,100), mt_rand(0,100), mt_rand(0,100)); //字符随即颜色
   ImageChar($im, $fontsize, $j, 3, $code, $color3); //绘字符
   $randcode .= $code; //逐位加入验证码字符串
  }
 
  /*
  * 添加干扰
  */

  for($i=0; $i<5; $i++)//绘背景干扰线
  {  
   $color1 = ImageColorAllocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); //干扰线颜色
   ImageArc($im, mt_rand(-5,$w), mt_rand(-5,$h), mt_rand(20,300), mt_rand(20,200), 55, 44, $color1); //干扰线
  }  
  for($i=0; $i<$how*15; $i++)//绘背景干扰点
  {  
   $color2 = ImageColorAllocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); //干扰点颜色
   ImageSetPixel($im, mt_rand(0,$w), mt_rand(0,$h), $color2); //干扰点
  }
 
  //把验证码字符串写入session
 
  //$this->session->set_userdata($this->name,$randcode));
  $CI = & get_instance();
  $CI->session->set_userdata($this->name, $randcode);
  /*绘图结束*/
  Imagegif($im);
  ImageDestroy($im);
  /*绘图结束*/
}
}
?>
 
复制代码

PHP复制代码
 
控制器
<?php
class Welcome extends CI_Controller {
function _construct()
{
  parent::Controller();
}
/*
  *跳转到登陆页
  */

function Index()
{
  $this->load->helper('url');
  //$this->load->view('User/Login');
  $this->load->view('User/Test');
}
function yzm()
{
  $conf['name']='yzm';
  $this->load->library('captcha_code',$conf);
  $this->captcha_code->show();
}
function check()
{
  $aaa=$this->session->userdata('yzm');
  print_r($aaa);
  $this->load->helper('url');
  $this->load->view('User/Test');
}
}
?>
 
复制代码
PHP复制代码
 
页面
<img src="<?php echo site_url('Welcome/yzm');?>" name="checkCodeImg" id="checkCodeImg" border="0" />
<a href="http://localhost/index.php/Welcome/check">aaa</a>
 
复制代码

PHP复制代码
 
$autoload['libraries'] = array('session');
 
复制代码

check()方法中的session值是空值!调了好久都不知道哪里出错 各位大神求救

 楼主| 发表于 2011-11-4 16:48:45 | 显示全部楼层
Session类是用Hex老大的Session类
 楼主| 发表于 2011-11-4 17:14:38 | 显示全部楼层
顶呀顶
发表于 2012-2-10 11:00:37 | 显示全部楼层
我这咋可以 ?
发表于 2012-2-10 12:04:19 | 显示全部楼层
$aaa=$this->session->userdata('yzm');

这个错了吧?你set的时候不是用的 yzm,你用的是 $this->name,而这个 name 是 var $name='randcode';

仔细检查下吧。
发表于 2012-8-17 11:34:33 | 显示全部楼层
Hex 发表于 2012-2-10 12:04
$aaa=$this->session->userdata('yzm');

这个错了吧?你set的时候不是用的 yzm,你用的是 $this->name,而 ...

为什么 我name 改了 也不行啊
我想在STLOG整合 加入验证码 session 不出啊

PHP复制代码
 
验证用户名和密码
public function validate_user($username, $password ,$yzm)
    {
        $data = FALSE;
//        $this->load->library('captcha_code');
//        $sessionad=$this->session->set_userdata('randcode');
        echo  $this->session->userdata('randcode');die;
         echo $sessionad=$this->session->userdata('randcode');die;
         
//         var_dump($sessionad);die;
//        var_dump($sessionad);die;
        $this->db->where('name', $username);
        $query = $this->db->get(self::TBL_USERS);
       
        if($query->num_rows() == 1)
        {
            $data = $query->row_array();
        }
             
        if(!empty($data))
        {
            $data = (Common::hash_Validate($password, $data['password'])) ? $data : FALSE;
//            $data1 = (Common::hash_Validate($yzm, $this->session->set_userdata('yzm'))) ? $data : FALSE;
           
        }
 
复制代码

发表于 2012-10-24 14:14:42 | 显示全部楼层
我碰到和你一样的问题,请问你解决了吗???怎么解决???急,谢谢!在线等!!!
发表于 2013-2-25 12:23:26 | 显示全部楼层
function yzm()
        {
                $conf['name']='yzm';
                $this->load->library('captcha_code',$conf);
                $this->captcha_code->show();
                $this->session->set_userdata(array('yzm'=>$_SESSION[$conf['name']]));
        }


注意开启  session_start();
发表于 2013-2-25 12:44:39 | 显示全部楼层
同意楼上的
CIer  发表于 2015-5-18 11:17:49
验证码不能按发送了

本版积分规则