Heim >Backend-Entwicklung >PHP-Tutorial >php如何在进入页面的时候自动刷新一次验证码

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

WBOY
WBOYOriginal
2016-06-23 13:55:371304Durchsuche

页面直接进入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头

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:使用apache代理实现nat技术Nächster Artikel:如何调用类外的变量