session技术与cookie相似,都是用来存储使用者的相关资料。但最大不同之处在于cookie是将资料存放与客户端电脑之中,而session则是将数据存放与服务器系统之下。
利用cookie(session)传输数据
实现功能:通过cookie和session实现用户名的传入,验证码的验证
思路步骤:1、建数据库存有用户名,密码,id
2、如果写入的用户名、密码和数据库中的一样,提示正确并进入留言界面(不正确重新输入),而留言板界面利用cookie输出用户名,会显示某某登录。如果输入的验证码和session保存在服务器系统下的一样,提示正确,否则不正确
1、
2、
3、
4、
5、
1、denglu.php
<script language="javascript" type="text/javascript">
function refreshcode(obj,url){
obj.src=url+"?nowtime="+Math.random();//random来返回 0 到 1 之间的随机数
//url=this.src,加上随机数值,是因为在ie中相同的请求地址只能响应一次
}
</script>
</head>
<body>
<center><h1>用户登录</h1></center>
<form action="=logon.php" method="post">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
验证码:<input type="text" name="ckcode">
<img src="yanzhengma.php" alt="看" style="cursor:pointer;" οnclick="refreshcode(this,this.src);"><br><!--点击验证码会刷新,出新的验证码-->
<input type="submit" value="登录">
<input type="button" οnclick="" value="取消">
</form>
</body>
2、logon.php
<?php
$link=mysql_connect('localhost','root','123') or die("不能连接");//连接数据库
mysql_select_db('lyb',$link);//选择数据库
mysql_query("set names utf8");//设置编码格式
$result = mysql_query("select* from user where username='".$_POST["username"]."'");//从数据库中调出与输入的用户名一样的一行数据
$row=mysql_fetch_assoc($result);//该函数将一条结果记录返回并以一个关联数组的形式保存
if($_POST["password"]==$row["password"]){//如果你在登陆页面输入的密码与数据库中的密码一样
session_start();//启动session
if(trim(strtolower($_POST["ckcode"]))==strtolower($_SESSION["ckcode"])){//如果从登陆页面获得的验证码=session保存的验证码。trim是去除空格。strtolower() 函数把字符串转换为小写。(验证码不区分大小写)
setcookie("name",$_POST["username"]);//定义一个cookie名字是你在登陆页面输入的用户名。设置一个cookie在别的网页也能读出(在aa.html中读出名字)
echo "用户名和密码正确,请等5秒,跳转到留言页面。。。";
header("refresh:5;url=http://localhost/phpjiaqiang/liuyanban3/5aa.php");}//header() 函数向客户端发送原始的 HTTP 报头。refresh刷新,
else{
echo "验证码错误,请稍等5秒。。。";
header("Refresh: 5; url=http://localhost/phpjiaqiang/liuyanban3/1login.php");
}
}
else{
echo "用户名和密码错误,重新登录,5秒后跳回登录页面!!!!";
header("refresh:5;url=http://localhost/liuyan3/1login.php");
}
?>
3、aa.php
欢迎<?php echo $_COOKIE["name"]; ?>登陆本系统<!--和logon.php有关,在aa.php中就会显示获得的cookie的值就是输入的用户名-->
<form action="" method="post">
姓名:<input type="text" name="username" value=<?php echo $_COOKIE["name"]; ?> readonly="readonly" /><br><br><!--加了value= echo $_COOKIE["name"]; 名字就是登陆时的用户名,readonly="readonly"只读不能修改-->
主题:<input type="text" name="title"><br><br>
内容:<br><textarea name="content" cols="30" rows="8"></textarea>
<input type="submit" name="submit"value="提交留言">
</form>
</body>
4、yanzhengma.php
<?php
ob_clean();//清除之前所有的输出把前面的空格等清除
$im=imagecreatetruecolor(80,20);//创建画布
$bgcolor=imagecolorallocate($im,220,230,230);//调色
$border=imagecolorallocate($im,0,0,255);//设置边框的颜色
$tcolor=imagecolorallocate($im,255,0,0);
$green=imagecolorallocate($im,0,0xff,0);
imagefill($im,10,10,$bgcolor);//填充背景色
imagerectangle($im,1,1,79,19,$border);//绘制边框,也就是一个矩形,画布(0,0,80,20)边框(1,1,79,19)
$num = rand(48,122);
//rand产生一个随机整数rand(5,10)产生5-10的随机数包括5,10
for($i=0;$i<4;$i++){
$num_case=rand(0,2);//产生随机数0-2,根据数值的不同决定产生的是数字|小写|大写
switch($num_case){
case 0:$num=rand(48,57);break;//数字
case 1:$num=rand(65,90);break;//大写
default:$num=rand(97,122);//小写
}//随机产生数,通过$sum传递到sprintf中变成相应的ASSII码值转换成大写,小写等
//sprintf() 函数把格式化的字符串写写入一个变量中。%c依照 ASCII 值的字符
$text[$i]=sprintf("%c",$num);//将随机产生的assii码转换为相应的字符
imagettftext($im,rand(15,25),rand(5,30),20*$i,20,$tcolor,"ahronbd.ttf",$text[$i]);
}//用 TrueType 字体向图像写入文本
//imagettftext ( resource image, float size, float angle, int x, int y, int color, string fontfile, string text )image图像资源,size字体大小,angle角度制表示的角度,0 度为从左向右读的文本。更高数值表示逆时针旋转。例如 90 度表示从下向上读的文本。fontfile要使用的 TrueType 字体的路径。text文本字符串。
for($i=0;$i<100;$i++){
imagesetpixel($im,rand(1,79),rand(1,22),$green);//随机产生100个点,随机产生x,y轴
}
//session_start();
//$_SESSION["ckcode"]=implode($text);//保存到session中
header("Content-type:image/png");//设置输出类型
imagepng($im);//以PNG格式将图像输出到浏览器或文件
imagedestroy($im);//销毁图像释放内存
?>