session获取不到图片验证码的值
本帖最后由 飞雪残剑 于 2011-10-7 20:19 编辑这是我从咱们社区下载下来的代码,想学习一下,可是当我在调试验证码模块的时候,不知怎么验证码总是不能写入到session里,希望各位大大帮小弟看看问题出在哪里了
这是我application/controller/admin/admin.php控制器里的内容:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Admin extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url'));
$this->load->library('session');
}
function index()
{
$temp['xinxi']="";
$temp['old'] = "";
$temp['new'] ="";
$this->load->view('admin/login',$temp);
}
function yzm()
{
$conf['name']='yzm';
$this->load->library('captcha_code',$conf);
$this->captcha_code->show();
}
function check_login()
{
$yzm=$this->input->post('CheckCode');
$username=$this->input->post('UserName');
$userpass=$this->input->post('Password');
$yzm_session=$this->session->userdata('yzm');
if($yzm==$yzm_session)
{
$where['username']=$username;
$where['userpass']=sha1($userpass);
$table="admin";
$query=$this->db->get_where($table,$where);
$num=$query->num_rows();
if($num>0)
{
$this->session->set_userdata(array('manager'=>$username));
$this->session->unset_userdata('yzm');
redirect('admin_login/main');
}
else
{
$temp['xinxi']="用户名密码错误";
$this->load->view('admin/login',$temp);
}
}
else
{
$temp['old'] = $yzm;
$temp['new'] = $yzm_session;
$temp['xinxi']="验证码输入错误";
$this->load->view('admin/login',$temp);
}
}
function login_out()
{
$this->session->unset_userdata('manager');
redirect('admin/');
}
}
?>
这是我application/libraries/Captcha_code.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(array($this->name=>$randcode));
$_SESSION[$this->name]=$randcode;
/*绘图结束*/
Imagegif($im);
ImageDestroy($im);
/*绘图结束*/
}
}
?>
这是我application/views/admin/login.php 视图的代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>管理员登录</TITLE>
<base href="<?=base_url()?>" />
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<LINK href="images/admin/southidc.css" rel=stylesheet>
<SCRIPT language=javascript>
<!--
function SetFocus()
{
if (document.Login.UserName.value=="")
document.Login.UserName.focus();
else
document.Login.UserName.select();
}
function CheckForm()
{
if(document.Login.UserName.value=="")
{
alert("请输入用户名!");
document.Login.UserName.focus();
return false;
}
if(document.Login.Password.value == "")
{
alert("请输入密码!");
document.Login.Password.focus();
return false;
}
if (document.Login.CheckCode.value==""){
alert ("请输入您的验证码!");
document.Login.CheckCode.focus();
return(false);
}
}
//-->
</SCRIPT>
<script type="text/javascript">
function reloadCode() {
var Pnk = document.getElementById("checkCodeImg");
Pnk.src = "<?php echo site_url('admin/admin/yzm')?>?tempstr=" + Math.random();
}
</script>
<STYLE type=text/css>.STYLE2 {
COLOR: #cccccc
}
.STYLE3 {
FONT-WEIGHT: bold; FONT-SIZE: 14px
}
</STYLE>
<META content="MSHTML 6.00.2900.6058" name=GENERATOR></HEAD>
<BODY class=bgcolor bgColor=#fffff6>
<P> </P>
<?php echo form_open('admin/admin/check_login',array('onSubmit'=>'return CheckForm();','target'=>'_parent','name'=>'Login'));?>
<TABLE cellSpacing=0 cellPadding=0 align=center border=0>
<TBODY>
<TR>
<TD><IMG height=46 alt=网站管理系统 src="images/admin/login_r.gif" width=515
border=0></TD></TR>
<TR>
<TD vAlign=top background=images/admin/login_l.gif height=211>
<TABLE cellSpacing=5 cellPadding=0 width="60%" align=right border=0>
<TBODY>
<TR align=middle>
<TD colSpan=2 height=38><SPAN class=STYLE3><FONT color=#000000>管 理 员
登 录</FONT></SPAN> </TD></TR>
<TR>
<TD align=right><B>用户名称:</B></TD>
<TD><INPUT id=UserName4
style="BORDER-RIGHT: 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; BORDER-LEFT: 1px solid; WIDTH: 160px; PADDING-TOP: 1px; BORDER-BOTTOM: 1px solid"
maxLength=20
name=UserName></TD></TR>
<TR>
<TD align=right><B>用户密码:</B></TD>
<TD><INPUT
style="BORDER-RIGHT: 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; BORDER-LEFT: 1px solid; WIDTH: 160px; PADDING-TOP: 1px; BORDER-BOTTOM: 1px solid"
type=password
maxLength=20 name=Password></TD></TR>
<TR>
<TD align=right><B>验 证 码:</B></TD>
<TD><INPUT
style="BORDER-RIGHT: 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; BORDER-LEFT: 1px solid; PADDING-TOP: 1px; BORDER-BOTTOM: 1px solid"
maxLength=4 size=6
name=CheckCode id="CheckCode"> <a href="javascript:reloadCode();"><img src="<?php echo site_url('admin/admin/yzm');?>" name="checkCodeImg" id="checkCodeImg" border="0" /></a></TD>
</TR>
<TR>
<TD colSpan=2><span style="color:#FF0000"><?php echo $xinxi;?><br /> <?php echo "输入的验证码:".$old;?><br /><?php echo "生成的验证码:".$new;?></span></TD>
</TR>
<TR>
<TD colSpan=2>
<DIV align=center><INPUT style="BORDER-RIGHT: #e1f4ee 1px solid; BORDER-TOP: #e1f4ee 1px solid; FONT-SIZE: 9pt; BORDER-LEFT: #e1f4ee 1px solid; WIDTH: 60px; COLOR: #000000; BORDER-BOTTOM: #e1f4ee 1px solid; HEIGHT: 19px; BACKGROUND-COLOR: #e1f4ee" type=submit value=" 确 认 " name=Submit>
<INPUT id=reset style="BORDER-RIGHT: #e1f4ee 1px solid; BORDER-TOP: #e1f4ee 1px solid; FONT-SIZE: 9pt; BORDER-LEFT: #e1f4ee 1px solid; WIDTH: 60px; COLOR: #000000; BORDER-BOTTOM: #e1f4ee 1px solid; HEIGHT: 19px; BACKGROUND-COLOR: #e1f4ee" type=reset value=" 清 除 " name=reset>
<BR></DIV></TD></TR>
<TR>
<TD colSpan=2> </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR>
<TABLE cellSpacing=0 cellPadding=0 width="75%" align=center border=0>
<TBODY>
<TR>
<TD> </TD></TR>
<TR>
<TD> </TD></TR>
<TR>
<TD></TD></TR></TBODY></TABLE>
<P align=center><BR></P></FORM>
<SCRIPT language=JavaScript type=text/JavaScript>
CheckBrowser();
SetFocus();
</SCRIPT>
</BODY>
</HTML>
生成的验证码不知怎么回事总是不能写入session里,请各位大大帮忙给看看,小弟感激不尽{:soso_e183:}{:soso_e183:}{:soso_e183:}
你图片验证码的session使用的是php的原生Session,如下:
$_SESSION[$this->name]=$randcode;
而CI默认的session库采用的是cookie或者数据库存储session值,实现上与php原生session不一样。
解决方案就二:
方案一(推荐):修改验证码库里面的session机制,将上述代码改成:
$CI = & get_instance();
$CI->session->set_userdata($this->name, $randcode);
方案二(不推荐):修改获取图片中的代码session至原生session机制,如下:
session_start();
$code = $_SESSION['captcha'];
输出SESSION看看咯 你的SESSION是使用COOIKE还是数据库的呀 非常不好意思,这几天都不在,今天才刚刚上来,按照 saturn 方法修改就可以实现了,非常感谢 saturn :victory::victory::victory: ~夜行侠~ 发表于 2011-10-2 17:32 static/image/common/back.gif
你的SESSION是使用COOIKE还是数据库的呀
当时就是输出的session为空呀,貌似不是用的数据库的吧,不过现在已经解决了,也非常感谢 ~夜行侠~ 的热情帮助,谢谢谢谢 学习下。坐等大家回答 飞雪残剑 发表于 2011-10-7 16:18 static/image/common/back.gif
非常不好意思,这几天都不在,今天才刚刚上来,按照 saturn 方法修改就可以实现了,非常感谢 saturn :victo ...
验证码那个我按他的改了还不好用啊 学习一下,呵呵 谢谢了啊。可以了2.10的版本
页:
[1]
2