cookie (储存在用户本地终端上的数据)
Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。定义于RFC2109和2965都已废弃,最新取代的规范是RFC6265[1] 。(可以叫做浏览器缓存)
(摘自百度百科)
session (计算机语言)
Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。有关使用 Session 对象的详细信息,请参阅“ASP 应用程序”部分的“管理会话”。注意 会话状态仅在支持 cookie 的浏览器中保留。
cookie 和session 的区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、所以个人建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中
接下来以一个用户登录注销来做示范
<1>连接数据库conn.php
<?php
$conn=mysql_connect('localhost','root','');
$sql=mysql_query('use test',$conn);
$sql=mysql_query('set names utf8',$conn);
?>
<2>用户登录界面login.html
<html>
<head>
<title>Login</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<form name="form1" method="post" action="login.php">
<table width="400" border="0" align="center" cellpadding="2" cellspacing="2">
<tr>
<td width="150"><div align="right">用户名:</div></td>
<td width="150"><input type="text" name="username" />
</td>
</tr>
<tr>
<td><div align="right">密码:</div></td>
<td><input type="password" name="passcode"></td>
</tr>
<tr>
<td><div align="right">用户名保存时间:</div></td>
<td><select name="cookie" id="cookie">
<option value="1" selected="selected">6 second</option>
<option value="2">1 minute</option>
<option value="3">1 day</option>
</select>
</td>
</tr>
</table>
<p align="center">
<input type="submit" name="Submit" value="登陆" onclick="qq();">
<input type="reset" name="Reset" value="重置">
</p>
</form>
</body>
<script type="text/javascript">
document.getElementsByName('username')[0].value=getCookie('username');
document.getElementsByName('passcode')[0].value=getCookie('passcode');
function getCookie(c_name)
{
if (document.cookie.length>0)
{
c_start=document.cookie.indexOf(c_name + "=")
if (c_start!=-1)
{
c_start=c_start + c_name.length+1
c_end=document.cookie.indexOf(";",c_start)
if (c_end==-1) c_end=document.cookie.length
return unescape(document.cookie.substring(c_start,c_end))
}
}
return "";
}
</script>
</html>
<3>用户登录信息验证login.php
<?php
include('conn.php');
$username = $_POST['username'];
$passcode = $_POST['passcode'];
$cookie = $_POST['cookie'];
//执行SQL语句
$query = mysql_query("select username, passcode from users "
."where username = '$username' and passcode = '$passcode'");
//判断用户是否存在,密码是否正确
if($row = mysql_fetch_assoc($query))
{
if($row['userflag'] == 0||$row['userflag'] == 1) //判断用户权限信息是否有效
{
switch($cookie) //根据用户的选择设置cookie保存时间
{
case 1: //保存10秒
setcookie("username", $row['username'],time()+6,"/");
setcookie("passcode", $row['passcode'],time()+6,"/");
break;
case 2: //保存1分钟
setcookie("username", $row['username'], time()+60,"/");
setcookie("passcode", $row['passcode'], time()+60,"/");
break;
case 3: //保存1天
setcookie("username", $row['username'], time()+24*60*60,"/");
setcookie("passcode", $row['passcode'], time()+24*60*60,"/");
break;
}
header("location: main.php",true,307); //自动跳转到main.php
}
else
{
echo "用户权限信息不正确";
}
}
else
{
echo "用户名或密码错误";
}
?>
<4>登陆成功界面main.php
<?php
session_start();
$_SESSION['username']=$_POST['username'];
echo '$_SESSION[\'username\']=',$_SESSION['username'],'<br />';
include('conn.php');
if(isset($_COOKIE['username']))
{
$username = $_COOKIE['username'];
//执行SQL语句获得userflag的值
$query =mysql_query("select userflag from users "
."where username = '$username'");
$row = mysql_fetch_array($query);
//获得用户权限信息
$flag = $row['userflag'];
//根据userflag的值输出不同的欢迎信息
if($flag == 1)
{echo "欢迎管理员".$_COOKIE['username']."登录系统";}
if($flag == 0)
{echo "欢迎用户".$_COOKIE['username']."登录系统";}
echo "<a href='logout.php'>注销</a>";
}
else
{
echo "您没有权限访问本页面";
}
?>
<5>注销处理页面logout.php
<?php
session_start();
echo '销毁session前$_SESSION[\'username\']=',$_SESSION['username'],'<br />';
unset($_SESSION['username']);
echo '销毁session后$_SESSION[\'username\']=',$_SESSION['username'],'<br />';
// 最后彻底销毁session.
session_destroy();
echo "注销成功......3s后跳转";
header("refresh:3;url=login.html",true,307);
?>
附:HTTP协议请求状态码:
页面加载成功
200-服务器成功返回页面
301/302- 永久/临时重定向
304 -Not Modified-未修改
307-重定向中保护原有请求数据
页面加载失败
404-请求页面不存在
503-服务器暂时不可用
500-服务器内部错误