13.Cookie的应用与Session会话处理(小案例:登录验证)

news/2024/5/18 13:43:00 标签: session, cookie, 登录验证, setcookie, unset删除

背景

在HTTP(超文本传输协议)定义通过万维网(WWW)传输文本、图形、视频和所有其他数据的所有规    则。HTTP是一种无 状 态的协议,说明每次请求的处理都与之前或之后的请求无关。虽说对HTTP的普及做    出了相应的贡献,但是对web开发人员而言,产生了困扰。
为此,出现了一种在客户端机器上存储少量信息的cookie,同时由于cookie大小限制、数量及其他原    因,又提出了解决方案:session会话处理。


内容要点

  1、cookie的应用
        2、session会话处理


1、cookie的应用

(1)设置cookie:setcookie()函数
a、函数作用:送出信息到浏览器
b、该函数会在客户端生成一个cookie文件,可保存到期时间、名称、值


案例1:新建一个demo1.php表示cookie名称及名称的值
<?php
//创建一个cookie
//cookie是在客户机上存一个小文件,这个文件包含了登陆的信息
setcookie('name','Zhao');
?>



上述函数中,setcookie()有两个参数,
 参数1:cookie的名称
 参数2:cookie名称的值


案例2:创建一个demo2.php包含过期时间的cookie,过期时间=当前时间戳+秒

<?php
setcookie('name','Zhao',time()+7*24*60*60);
?>



(2)setcookie():读取本地主机的cookie的值
a、需要采用一个超级变量$_COOKIE
setcookie()函数中,里边放cookie名即可,需要注意的是该函数总会慢半拍
(获取之前的,必须二次刷新,才能真正获利)
b、变量检测函数:isset()
<?php
setcookie('name','ZXY');
//echo $_COOKIE['name'];
//用isset()方法验证cookie是否存在
if(isset($_COOKIE['name'])){
	echo $_COOKIE['name'];
}
else{
	echo '不存在此用户';
}
?>



(3)删除cookie
方法1:将setcookie(参数1[名称],参数2[名称值])中的参数2设置为null
方法2:采用过期时间,即需要借助time()函数,如“time()-1”
<?php
setcookie('name','ZXY'); //创建
//方法1:设置cookie值为null
//setcookie('name','');


//方法2:设置过期时间
setcookie('name','ZXY',time()-1);
?>


步骤1:先创建cookie——setcookie('name','ZXY');
步骤2:输出cookie——echo $_COOKIE['name'];




(4)使用cookie限制
a、必须在HTML文件的内容输出之前设置
b、不同的浏览器对cookie的处理不一致,有时会出现错误的结果
c、限制是在客户端的,一个浏览器能创建的cookie数量最多为30个,且每个不能超过4kb,
   每个web站点能设置的cookie总数不能超过20个。




小案例——登录界面
demo4-1.php:form登录表单
<meta http-equiv="Content-Type" content="text/html;charset=GBK">
<form method="post" action="demo4.php">
    姓名:<input type="text" name="username">
  <input type="submit" value="提交" />  
</form>


demo4-2.php:判断姓名是否与指定相同,生成cookie,完成登录。
<?php
//如果姓名和指定的姓名相同,就生成一个cookie
//完成登录
if(isset($_POST['username'])&& $_POST['username']=='ZXY'){
    //如果正确,生成一个cookie,在跳转;
    setcookie('name','zhaoxiaohua');
    header('Location:demo5.php');
}
else {
    header('Location:demo3.php');
}
?>


demo4-3.php:判断是否有name值,判断是否登陆成功
<meta http-equiv="Content-Type" content="text/html;charset=GBK">
<?php
//先判断是否有name值;
if (isset($_COOKIE['name'])){
    echo '欢迎光临'.$_COOKIE['name'];
}
else {
    echo '非法登录';
}
?>


2、session会话处理

(1)session_start():开始会话处理
只要用到session,就必须开启该函数,放在文件开头
a、若要创建session,即直接采用超级全局变量
b、session存在于服务器端,一般存放1440s
c、若网页没有进行任何操作,即会自动销毁,也可以通过php.ini修改保存时间
若关闭浏览器,即也会自动销毁
(2)与cookie比较的session
特点:及时性的,不会像session慢半拍
(3)unset():删除cookie
<?php
session_start();
$_SESSION['name']='Zhao';
//用isset()函数判断变量session是否存在;
//if(isset($_SESSION['name'])){
//	echo $_SESSION['name'];
//}
//else{
//	echo '不存在此人';
//}




//删除session:unset()函数
unset($_SESSION['name']);
echo isset($_SESSION['name']);
?>


(4)destroy():销毁所有session
<?php
//步骤1:先开启session
session_start();
//步骤2:销毁所有的session,销毁也是慢半拍;
session_destroy();
//步骤3:输出session;
echo $_session['name1'];
echo $_session['name2'];
?>


(5)sessioncookie
a、cookie:应用于会员登录,购物车
(由于其不占用服务器资源,所以会员特别多,就用cookie
b、session:一般用于后台管理登录,人少
(安全性,一段时间不操作会自动过期)





http://www.niftyadmin.cn/n/1659455.html

相关文章

前端布局系列---flex布局

布局是指HTML的整体结构&#xff0c;好的布局直接影响到用户的体验&#xff0c;同样&#xff0c;在前端面试的过程中&#xff0c;布局也是一个必问点&#xff0c;所以&#xff0c;今天我们来整体回顾一下flex布局。 什么是flex布局&#xff1f; flex是flexibleBox的缩写&#…

CSS Selectors Level 4新特性全面解析

前言 当看到 CSS Selectors Level 4 很多人会理所当然地喊出 CSS4。但是&#xff0c;这里必须明确一个概念&#xff0c;目前所谓的 CSS3 和 CSS4 都是 CSS2.1 以后对某一些 CSS 模块进行升级更新后的称呼。CSS3 和 CSS4 永远都不会出现&#xff0c;它们只是为了区分 CSS 模块升…

Node.js用户登录:从cookie到session到redis

前言 当用户登录之后&#xff0c;需要标识用户的登录信息&#xff0c;用户在做其他操作的时候&#xff0c;比如电商系统中的添加购物车的功能&#xff0c;博客系统中的新建博客等都需要用户登录之后才可以操作&#xff0c;那如何才能标识用户已经登录呢&#xff1f; cookie …

前端面试分享:冒泡排序和快速排序

前端面试过程中&#xff0c;某些公司对基础的算法也有一定的要求&#xff0c;比如常见的冒泡排序&#xff0c;快排等&#xff0c;今天我们就一起来看一下这两个排序算法。 冒泡排序 排序思想&#xff1a; 每次比较相邻的两个数&#xff0c;如果后一个比前一个小&#xff0c;则…

国内免费(开源)CMS内容管理系统介绍

最近在网上搜集了一下国内的CMS程序&#xff0c;包括了类型&#xff0c;脚本&#xff0c;及其特点和评价&#xff0c;希望能对大家有所帮助&#xff0c; 由于搜集于网络难免有不足和纰漏之处&#xff0c;还请大家能多多指正&#xff01; 首先还是介绍一下什么是CMS。CMS&…

Javascript高级程序设计——12.基本包装类型

内容要点&#xff1a; 1、基本包装类型 2、Boolean类型 3、Number类型 4、String类型 背景&#xff1a; 为了便于操作基本类型的值&#xff0c;ECMAScript提供了3种特殊的引用类型&#xff1a;Booloean、String、Number 这些类型与其他引用类型相似&#xff0c;但却同时具…

JS数组去重方法整理,再也不用担心数组如何去重了

前端笔试的过程中&#xff0c;大概率会有这样一道题&#xff0c;给你一个字符串数组&#xff0c;让你输出其中不重复的字符串的个数&#xff0c;这就是典型的数组去重了&#xff0c;那应该如何进行数组去重呢&#xff1f;本篇文章整理了近10种方案&#xff0c;你来看看那个最适…

Javascript高级程序设计——13.内置对象

ECMA-262只定义了2个内置对象&#xff1a;Globel和Math 1、Global对象 表示全局变量&#xff0c;但该对象其实并不存在&#xff0c; 事实上&#xff0c;并不存在全局变量和全局函数&#xff1a;所有在全局作用于定义的变量和函数&#xff0c;都是Global对象的属性和方法 注意…