Home >Backend Development >PHP Tutorial >为什么这个session值不对呢?

为什么这个session值不对呢?

WBOY
WBOYOriginal
2016-06-06 20:06:391243browse

从网上找的一个验证码的代码 我在yzm1.php的页面想把session值打印出来看一下 为什么
session的值和图片上的不一样? 每次刷新yzm1.php页面打印出来的字符串和页面刷新前的图片上的字符串一样 也就是图片上出现的字符串等刷新一次后echo $_SESSION["aaa"]的值一样 他们为什么不同时一样呢? 那么我怎么做验证呢?

yzm1.php

<code><?php if(!isset($_SESSION)){ session_start(); }
echo $_SESSION["aaa"];
?>



    <title></title>
    <script type="text/javascript">
        window.onload=function(){
            function changing(){
    document.getElementById('checkpic').src="checkcode.php?"+Math.random();
} 
        } 
    </script>


<input type="text"><br>
<img  id="checkpic" onclick="changing();" src="yzm2.php" alt="为什么这个session值不对呢?" >


</code>

yzm2.php

<code><?php if(!isset($_SESSION)){ session_start(); }
function random($len) {
    $srcstr = "1a2s3d4f5g6hj8k9qwertyupzxcvbnm";
    mt_srand();
    $strs = "";
    for ($i = 0; $i < $len; $i++) {
        $strs .= $srcstr[mt_rand(0, 30)];
    }
    return $strs;
}
 
//随机生成的字符串
$str = random(4); 
 
//验证码图片的宽度
$width  = 50;      
 
//验证码图片的高度
$height = 25;     
 
//声明需要创建的图层的图片格式
@ header("Content-Type:image/png");
 
//创建一个图层
$im = imagecreate($width, $height);
 
//背景色
$back = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);
 
//模糊点颜色
$pix  = imagecolorallocate($im, 187, 230, 247);
 
//字体色
$font = imagecolorallocate($im, 41, 163, 238);
 
//绘模糊作用的点
mt_srand();
for ($i = 0; $i < 1000; $i++) {
    imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), $pix);
}
 
//输出字符
imagestring($im, 5, 7, 5, $str, $font);
 
//输出矩形
imagerectangle($im, 0, 0, $width -1, $height -1, $font);
 
//输出图片
imagepng($im);
 
imagedestroy($im);
 
 
//选择 cookie
//SetCookie("verification", $str, time() + 7200, "/");
 
//选择 Session
$_SESSION["aaa"] = $str;
?></code>

回复内容:

从网上找的一个验证码的代码 我在yzm1.php的页面想把session值打印出来看一下 为什么
session的值和图片上的不一样? 每次刷新yzm1.php页面打印出来的字符串和页面刷新前的图片上的字符串一样 也就是图片上出现的字符串等刷新一次后echo $_SESSION["aaa"]的值一样 他们为什么不同时一样呢? 那么我怎么做验证呢?

yzm1.php

<code><?php if(!isset($_SESSION)){ session_start(); }
echo $_SESSION["aaa"];
?>



    <title></title>
    <script type="text/javascript">
        window.onload=function(){
            function changing(){
    document.getElementById('checkpic').src="checkcode.php?"+Math.random();
} 
        } 
    </script>


<input type="text"><br>
<img  id="checkpic" onclick="changing();" src="yzm2.php" alt="为什么这个session值不对呢?" >


</code>

yzm2.php

<code><?php if(!isset($_SESSION)){ session_start(); }
function random($len) {
    $srcstr = "1a2s3d4f5g6hj8k9qwertyupzxcvbnm";
    mt_srand();
    $strs = "";
    for ($i = 0; $i < $len; $i++) {
        $strs .= $srcstr[mt_rand(0, 30)];
    }
    return $strs;
}
 
//随机生成的字符串
$str = random(4); 
 
//验证码图片的宽度
$width  = 50;      
 
//验证码图片的高度
$height = 25;     
 
//声明需要创建的图层的图片格式
@ header("Content-Type:image/png");
 
//创建一个图层
$im = imagecreate($width, $height);
 
//背景色
$back = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);
 
//模糊点颜色
$pix  = imagecolorallocate($im, 187, 230, 247);
 
//字体色
$font = imagecolorallocate($im, 41, 163, 238);
 
//绘模糊作用的点
mt_srand();
for ($i = 0; $i < 1000; $i++) {
    imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), $pix);
}
 
//输出字符
imagestring($im, 5, 7, 5, $str, $font);
 
//输出矩形
imagerectangle($im, 0, 0, $width -1, $height -1, $font);
 
//输出图片
imagepng($im);
 
imagedestroy($im);
 
 
//选择 cookie
//SetCookie("verification", $str, time() + 7200, "/");
 
//选择 Session
$_SESSION["aaa"] = $str;
?></code>

不说逻辑, 只说代码
首先

<code class="php">
function random($len) {
    $srcstr = "1a2s3d4f5g6hj8k9qwertyupzxcvbnm";
    mt_srand();
    $strs = "";
    for ($i = 0; $i </code>

$str 的值就是这么来的, 所以, 只要你每次使用 yzm2 获取验证码出来的都不一定是一样的.

<code class="php">
$str = md5($str);
 
//选择 cookie
//SetCookie("verification", $str, time() + 7200, "/");
 
//选择 Session
$_SESSION["str"] = $str;
</code>

这个是望 session 中写值, 写 $str 之前把 $str md5 一次, 所以你看到的值不是生成的 $str

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn