cookie && session
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cookie && session相关的知识,希望对你有一定的参考价值。
1:cookie 是存于本地浏览器中而不是服务器中 有生命周期有生成条件 可被服务器和浏览器读取 一般用于存储用户信息
1.1.13 案例:永久登录
如果用户是在自己家的电脑上上网,登录时就可以记住他的登录信息,下次访问时不需要再次登录,直接访问即可。实现方法是把登录信息如账号、密码等保存在Cookie中,并控制Cookie的有效期,下次访问时再验证Cookie中的登录信息即可。
保存登录信息有多种方案。最直接的是把用户名与密码都保持到Cookie中,下次访问时检查Cookie中的用户名与密码,与数据库比较。这是一种比较危险的选择,一般不把密码等重要信息保存到Cookie中。
还有一种方案是把密码加密后保存到Cookie中,下次访问时解密并与数据库比较。这种方案略微安全一些。如果不希望保存密码,还可以把登录的时间戳保存到Cookie与数据库中,到时只验证用户名与登录时间戳就可以了。
这几种方案验证账号时都要查询数据库。
本例将采用另一种方案,只在登录时查询一次数据库,以后访问验证登录信息时不再查询数据库。实现方式是把账号按照一定的规则加密后,连同账号一块保存到Cookie中。下次访问时只需要判断账号的加密规则是否正确即可。本例把账号保存到名为account的Cookie中,把账号连同密钥用MD1算法加密后保存到名为ssid的Cookie中。验证时验证Cookie中的账号与密钥加密后是否与Cookie中的ssid相等
2:session 是存于服务器中存储信息 生命周期 存于浏览器开启的时间段 需通过session_id 来获取 而session_id 一般存于cookie中(由于采用服务器端保持状态的方案在客户端也需要保存一个标识 这个标示便是指seesion_id 一般存储于cookie中 如有其他存储方式亦是ok);
但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时
仍然能够把session id传递回服务器。
经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段。就是服务器
会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。比如:
<form name="testform" action="/xxx">
<input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764">
<input type="text">
</form>
实际上这种技术可以简单的用对action应用URL重写来代替。
图片验证代码实例:
<?php
$c=isset($_GET[‘c‘])?isset($_GET[‘c‘]):0;
if(isset($_GET[‘a‘])){//验证程序
if(isset($_POST[‘data‘])){
session_start();
$pdata=$_POST[‘data‘];
$data=$_SESSION[‘data‘];
echo $pdata.$data;
if($pdata==$data){
echo "ok";
}else{
echo "wrong";
}
}
die();
}
if($c==0){
if(!isset($_COOKIE[‘test‘])){//测试cookie
setcookie("test","jayx",time()+1000,‘‘,‘desktop‘);
echo "NULL";
}else{
echo $_COOKIE[‘test‘]."<br />";
}
}else if($c==1){
header(‘Content-Type: image/jpeg‘); //JPG、JPEG //生成图片页面
session_start();
$data=rand(1000,9999);
function creat_image( $width, $height, $authnum)
{
srand((double)microtime()*1000000);
$im = imagecreate( $width, $height);
$black = ImageColorAllocate( $im, 0,0,0);
$white = ImageColorAllocate( $im, 255,255,255);
$gray = ImageColorAllocate( $im, 200,200,200);
imagefill( $im,0,0, $gray);
//将四位整数验证码绘入图片
imagestring( $im, 5, 10, 3, $authnum, $black);
for( $i=0; $i<200; $i++)
{
$randcolor = ImageColorallocate( $im,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel( $im, rand()%70 , rand()%30 , $randcolor);
}
ImagePNG( $im);
ImageDestroy( $im);
}
creat_image(60,20, $data);
$_SESSION[‘data‘]=$data;
}
?>
<?php if($c==0){?>
<html>
<input type="text" width="100" name="data" /><img src="./se.php?c=1" width="100" height="100" id="cimg"/><input type="button" value="sub" />
</html>
<script src="./jquery.js"></script>
<script>
$(function(){
$("input[type=‘button‘]").click(function(){
var data=$("input[name=‘data‘]").val();
console.log(data);
$.post("./se.php?a=check",{data:data},function(msg){
alert(msg);
})
});
$("#cimg").click(function(){
$(this).attr("src","./se.php?c=1&r="+Math.random());
})
})
</script>
<?Php }?>
以上是关于cookie && session的主要内容,如果未能解决你的问题,请参考以下文章
Cookie && Session && Token