Rumah >pembangunan bahagian belakang >tutorial php >php如何在进入页面的时候自动刷新一次验证码

php如何在进入页面的时候自动刷新一次验证码

WBOY
WBOYasal
2016-06-23 13:55:371302semak imbas

页面直接进入login页面的时候无法获取到$_SESSION["auth"]值,只能刷新一次验证码才能获取到值,怎么才能在用户访问的时候自动刷新一次验证码,求大神支招。。。

 <div class="item fore3">                    <span>验证码</span>                    <div class="item-ifo">                        <input type="text" maxlength="4" class="text" name="randcode" id="randcode" tabindex="3"  />                        <img  onclick="get_randfunc(this);" src='<{$config.weburl} alt="php如何在进入页面的时候自动刷新一次验证码" >/includes/rand_func.php'/>                        <{if $smarty.get.erry=="-3"}>                            <font color="red"><{$lang.codeerr}></font>                        <{/if}>                    </div>                </div> 


回复讨论(解决方案)

哪里获取到$_SESSION["auth"]值?

if(!empty($_GET["action"]))	$post=$_GET;else	$post=$_POST;if(!empty($_GET['forward'])&&strpos($_GET['forward'],'script')>0)	header("Location:login.php");//全if(!empty($post["action"])&&$post["action"]=="submit"){	include_once("includes/global.php");	include_once("includes/smarty_config.php");	include_once("config/reg_config.php");	if(strtolower($_SESSION["auth"])!=strtolower($post["randcode"])&&empty($post['first_index'])&&empty($post['connect_id']))	{		header("Location: login.php?erry=-3");//证		exit();	} 

直接访问login.php页面$_SESSION["auth"]会为空,如果是从主页访问然后到登录页面$_SESSION["auth"]就会得到验证码的值

$_SESSION["auth"] 是由 rand_func.php 产生的
直接进入本身就不会有验证码,因为不是提交过来的

为什么刷新一次验证码验证码就会提交过来?怎么才能进入登录界面就提交呢?

像斑竹说的,session设置是发生在用户下载页面后请求验证码图片时,第一次请求php当然看不到验证码~
而且我对你的问题理解有点歧义...你是说第一次 访问login页面想获取到session,还是说第一次 提交验证码时获取不到session?
另外验证码的url最好加个随机数防止缓存,包括js换验证码图片的那个函数

估计是图片缓存问题。
php如何在进入页面的时候自动刷新一次验证码/includes/rand_func.php ?{time()}'/>

改成这样看看。

当我访问登录页面的时候$_SESSION["auth"]的值为空

下面是验证码代码

<?phpinclude_once("global.php");//===============================session_start();$_SESSION['auth'] = $randcode;class ValidationCode{	private $width,$height,$codenum;	public $checkcode;     //产生的验证码	private $checkimage;    //验证码图片	private $disturbColor = ''; //干扰像素		function ValidationCode($width='80',$   style="max-width:90%",$codenum='4')	{	   $this->width=$width;	   $this->height=$height;	   $this->codenum=$codenum;	}	function outImg()	{	   //输出头	   $this->outFileHeader();	   //产生验证码	   $this->createCode();	   //产生图片	   $this->createImage();	   //设置干扰像素	   $this->setDisturbColor();	   //往图片上写验证码	   $this->writeCheckCodeToImage();	   imagepng($this->checkimage);	   imagedestroy($this->checkimage);	}	private function outFileHeader()	{	   header ("Content-type: image/png");	}	private function createCode()	{	   $this->checkcode = strtoupper(substr(md5(rand()),0,$this->codenum));	}	private function createImage()	{		$this->checkimage = @imagecreate($this->width,$this->height);		$back = imagecolorallocate($this->checkimage,255,255,255);		$border = imagecolorallocate($this->checkimage,0,0,0);  		imagefilledrectangle($this->checkimage,0,0,$this->width - 1,$this->height - 1,$back); // 白色底		imagerectangle($this->checkimage,0,0,$this->width - 1,$this->height - 1,$border);   // 黑色边框	}	private function setDisturbColor()	{		for($i=0;$i<=200;$i++)		{			$this->disturbColor = imagecolorallocate($this->checkimage, rand(0,255), rand(0,255), rand(0,255));			imagesetpixel($this->checkimage,rand(2,128),rand(2,38),$this->disturbColor);		}	}	private function writeCheckCodeToImage()	{		for ($i=0;$i<$this->codenum;$i++)		{			$bg_color = imagecolorallocate ($this->checkimage, rand(0,255), rand(0,128), rand(0,255));			$x = rand(0,7)+floor($this->width/$this->codenum)*$i;			$y = rand(0,$this->height-15);			imagechar ($this->checkimage, rand(5,8), $x, $y, $this->checkcode[$i], $bg_color);		}	}	function __destruct()	{	   unset($this->width,$this->height,$this->codenum);	}}//===============================$width=$_GET['w']?$_GET['w']:"80";$height=$_GET['h']?$_GET['h']:"33";$image = new ValidationCode($width,$height,'4'); $image->outImg();$_SESSION["auth"] = $image->checkcode;?>

$_SESSION["auth"]的值首次访问会为空,刷新一次才会显示出来。。。

删除第5行的 $_SESSION['auth'] = $randcode;
第75、76行的
$width=$_GET['w']?$_GET['w']:"80";
$height=$_GET['h']?$_GET['h']:"33";
改为
$width = isset($_GET['w']) ? $_GET['w'] : "80";
$height = isset($_GET['h']) ? $_GET['h'] : "33";

还是不行。。。。

验证码图片出不来吗?

ValidationCode类单独放在一个文件,并且单独方法a生成验证码,
需要的时候直接调用a方法,记得将类的$_SESSION['auth'] = $randcode;去掉。

检查文件是否是含有bom头

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:使用apache代理实现nat技术Artikel seterusnya:如何调用类外的变量