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

解决方案 »

  1.   

    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"]就会得到验证码的值
      

  2.   

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

  3.   

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

  4.   

    估计是图片缓存问题。
    <img onclick="get_randfunc(this);" src='<{$config.weburl}>/includes/rand_func.php?{time()}'/>改成这样看看。
      

  5.   

    当我访问登录页面的时候$_SESSION["auth"]的值为空下面是验证码代码
    <?php
    include_once("global.php");
    //===============================
    session_start();
    $_SESSION['auth'] = $randcode;
    class ValidationCode
    {
    private $width,$height,$codenum;
    public $checkcode;     //产生的验证码
    private $checkimage;    //验证码图片
    private $disturbColor = ''; //干扰像素

    function ValidationCode($width='80',$height='20',$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;
    ?>
      

  6.   

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

  7.   

    删除第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";
      

  8.   

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