PHP Cookie和Session

cookie

cookle常用来识别用户,可以理解为浏览器留下的一种文件,cookie可以分为会话cookie和硬盘cookie两种,会话cookie生命周期短,浏览器关闭即销毁,硬盘cookie生命周期由开发者设定,可长可短

1.创建cookie

PHP创建cookie使用函数setcookie(name,value,expire,path,domain,secure);

参数:

name:设定cookie的名称
value:cookie的值
expire:cookie的有效时长,如果不设置则为会话cookie
path:规定 cookie 的服务器路径
domain:规定 cookie 的域名
secure:规定是否只能通过HTTPS传输cookie,默认f

2.读取cookie

使用$_cookie[]

3.更新cookie

同样使用setcookie();

4.删除cookie

把cookie的有效时长设置为负值即可
需要注意:更新和删除cookie时,path,domain值必须与之前的一致

5.使用cookie实现登录

思路:

1.最终目标

:将用户输入数据与数据库中数据做比较,如果对比成功,跳转到主页,如果用户直接访问主页,弹窗阻止,但如果用户勾选自动登录复选框,则第一次登录成功后,在一段时间内允许直接访问主页。

2.实现思路:

1.1 首先如果用户勾选复选框,登陆时产生一个包含md5加密后的用户名密码的硬盘cookie,反之产生一个同样的内存cookie,主页调用数据库中的用户名,密码,用同样的加密方法加密一个密文,与cookie中的value作比较,相同则允许进入,为了方便从数据库中找到相关用户,可在登录cookie的密文值后面加一个明文id,在主页拆分即可。

登录前端的html不写了

<?php

header("Content-type: text/html; charset=utf-8");
$usename=$_POST['usename']; //接受用户名
$passname=$_POST['pass'];//接受密码
$autologin=$_POST['check'];//接受是否自动登录
echo $autologin;
//接入数据库
$host = '127.0.0.1';
$user = 'root';
$pass = 'root';
$port=3306;
$link=@mysqli_connect("$host","$user","$pass","t2","3306");
@mysqli_set_charset($link,"utf8");
mysqli_select_db($link,'yonghu');//选择数据表
$sql="select id,username,password from yonghu WHERE username='{$usename}'&&password='{$passname}'";
$result=mysqli_query($link,$sql);
if(mysqli_num_rows($result)==1)
{
    //如果用户选择自动登录,则cookle类型设置为硬盘cookle
    if($autologin==1)
    {
        $row=mysqli_fetch_assoc($result);
        setcookie('usename',$usename,strtotime("+1 hours"));
        //加密操作
        $son="zeianquan";
        $key=md5($usename.$passname.$son).":".$row['id'];
        setcookie('key',$key,strtotime("+1 hours"));
    }
    //否则,将cookle设置为会话cookle
    else
    {
        setcookie('$usename',$usename);
    }
    exit("<script>
    alert('登录成功!');
    location.href='gerenjianjie.php';
    </script>");
}
else
{
    exit('用户名或密码错误.<a href="Untitled-2.php">重新注册</a>');
}
?>
<?php
header("Content-type: text/html; charset=utf-8");
if(!isset($_COOKIE['usename']))
{
    exit("<script>
    alert('请首先登录1!');
   location.href='dengluhouduan.php';
    </script>");
}
if(isset($_COOKIE['key'])) {
    $key = $_COOKIE['key'];
//找到cookle中的用户id ,与数据库中做对比,如果有,判断key是否正确,否则返回登录
    $resarr = explode(":", $key);
    $useid = end($resarr);
//接入数据库
    $host = '127.0.0.1';
    $user = 'root';
    $pass = 'root';
    $port = 3306;
    $link = @mysqli_connect("$host", "$user", "$pass", "t2", "3306");
    @mysqli_set_charset($link, "utf8");
    mysqli_select_db($link, 'yonghu');//选择数据表
    $sql = "select * from yonghu WHERE id=$useid";
    $result = mysqli_query($link, $sql);
//用户id存在,做进一步校验
    if (mysqli_num_rows($result) == 1) {
//校验思路:首先从数据库获取用户名,密码,用相同的办法加密,看密文与cookle中的是否相同
        $row = mysqli_fetch_assoc($result);
        $usename_t = $row['username'];
        $password_t = $row['password'];
        $file=$row['file'];
        $key = "zeianquan";
        $key_t = md5($usename_t.$password_t.$key);

        if ($key_t!= $resarr[0])
        {
            exit("<script>
             alert('请首先登录2!');
            location.href='dengluhouduan.php';
                </script>");
        }
    }
    else {
        exit("<script>
    alert('请首先登录3!');
    location.href='dengluhouduan.php';
    </script>");
    }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title><?php echo $usename_t?>的主页</title>
</head>
<body >
这是主页!!!!!!
</body>
</html>

session

session识别用户的,他与cookie的不同在于Cookie保存在客户端浏览器中,而Session保存在服务器上,因此,session的工作原理是为每个访客创建一个UID,一般通过cookie保存,或者通过URL传导。
1.开始session
session_start();
必须位于HTML标签之前
2.设置数据
$_session['name']=.........或者$-session=$var;

3.生命周期
可使用cookie设置

setcookie(session_name,session_id,expire);

4。用户禁用cookie后,可以使用URL传递UID
比如用一个超链接

<a href="####".session_id.>

session

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Junebao

如果你碰巧财力雄厚的话...

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值