PHP 精选之COOKIE-SESSION应用(HTTP协议状态码)

(摘自百度百科)
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-服务器内部错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值