热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php会话控制cookie与Session会话处理-PHP源码

在php中cookie与session通常用于注册登录与记录用户信息了,但是cookie与Session两个有很大的区别,下面我们一起来看看。
在php中COOKIE与session通常用于注册登录与记录用户信息了,但是COOKIE与Session两个有很大的区别,下面我们一起来看看。

会话简介:HTTP(超文本传输协议)定义了通过万维网(WWW)传输文本、图形、视频和所有
其他数据所有的规则。HTTP 是一种无状态的协议,说明每次请求的处理都与之前或之后的
请求无关。虽然这种简化实现对于HTTP 的普及做出了卓越的贡献,但对于希望创建复杂的
Web 应用程序的开发人员来说,这点有点困扰。为了解决这个问题,出现了一种在客户端
机器上存储少量信息(COOKIE)。
由于COOKIE 大小限制、数量及其他原因,开发人员又提出了一种解决方案:session 会
话处理。
一.COOKIE
的应用
设置COOKIE:setCOOKIE()函数可以在客户端生成一个COOKIE 文件,这个文件可以保存到
期时间、名称、值等。
创建COOKIE

代码如下
setCOOKIE(‘name’,'Lee’,time()+(7*24*60*60));//设置一个过期时间为7天的COOKIE
?>

参数1:COOKIE 名称
参数2:COOKIE 值
参数3:COOKIE 过期时间

查看COOKIE

打开火狐浏览器:工具–页面信息-安全-查看COOKIE,可以查看到当前的COOKIE信息
读取COOKIE

代码如下
echo $_COOKIE['name'];
?>

删除COOKIE

代码如下
setCOOKIE(‘name’,”);
setCOOKIE(‘name’,'Lee’,time()-1);
?>

使用COOKIE 的限制
1、必须在HTML 文件的内容输出之前设置;
2、不同的浏览器对COOKIE 的处理不一致,且有时会出现错误的结果。
3、限制是在客户端的。一个浏览器能创建的COOKIE 数量最多为30 个,并且每个不能
超过4KB,每个WEB 站点能设置的COOKIE 总数不能超过20 个。

二.Session
会话处理
在使用session 会话处理,必须开始session,使用session_start()开始会话。
创建session 并读取session

代码如下
session_start();
$_SESSION['name'] = ‘Lee’;
echo $_SESSION['name'];
?>

判断session 是否存在

代码如下
session_start();
$_SESSION['name'] = ‘Lee’;
if (isset($_SESSION['name'])) {
echo $_SESSION['name'];
}
?>

删除session

代码如下
session_start();
$_SESSION['name'] = ‘Lee’;
unset($_SESSION['name']);
echo $_SESSION['name'];
?>

销毁所有session

代码如下
session_start();
$_SESSION['name'] = ‘Lee’;
$_SESSION['name2'] = ‘Lee’;
session_destroy();
echo $_SESSION['name'];
echo $_SESSION['name2'];
?>


COOKIE与session的区别和关系
•存储位置:
1.session存储在服务器位置上,可以通过php.ini里面配置session相关配置
2.COOKIE存储在客户端上的上(其实可以分两种:
1,持久性COOKIE,设置了COOKIE的时间,以文件方式存在硬盘上,

2,会话COOKIE,没有设置COOKIE时间,COOKIE的生命周期也就是关闭浏览器前就消失,一般不会保存在硬盘,而是保存在内存上)

COOKIE和session的关系

QQ截图20111115185617

COOKIE通过http报头发送:

COOKIE name=PHP%BB%B4%B1%B1; PHPSESSID=cpt2ah3pi4cu7lo69nfbfllbo7

其中PHPSESSID就是关联服务器session的重要参数

再看session文件:sess_cpt2ah3pi4cu7lo69nfbfllbo7

session_id的生成格式就是:sess_加上一串PHPSESSID的值

我们可以这样理解:

当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识 (称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来 使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相 关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应 中返回给客户端保存。保存这个session id的方式可以采用COOKIE,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给 服务器。一般这个COOKIE的名字都是类似于SEEESIONID

php.ini里面关于session和COOKIE有关的配置


1,session.use_COOKIE = 1
是否采用COOKIE方法传递session id值。默认是1,表示启用。
2,session.name = PHPSESSID
不管是COOKIE传递sessioin_id,还是GET方法传递session_id,都需要使用键值。他们的格式分别是COOKIE: sess_name=session_id;和/path.php?sess_name=session_id,其中sess_name就是由这里指定的。
3,session.use_only_COOKIEs = 0
表示只使用COOKIE 的方法传递session id。我们说过,传递COOKIE的方法,除了COOKIE,还有GET方法,GET方法是不安全的方法。在用户端禁用了COOKIE的时候,会采用GET方法传递session_id,可以通过这个设置尽用GET方法传递session_id。
4,session.COOKIE_lifetime = 0, session.COOKIE_path = / 以及session.COOKIE_domain =
如果使用COOKIE方法传递session_id的话,这里分别指定了COOKIE有效域、目录和时间。分别对应setCOOKIE()函数的形参$expire、$path和$domain。其中COOKIE_lifetime=0表示直到关闭浏览器才删除COOKIE。还可以使用session_set_COOKIE_params()函数修改这些值。
5,session_name([string $name])
获取或更新session_name。如果传了name,则表示不使用默认的名称PHPSESSID(由session.name)指定,否则获取当前session_name。注意:如果设置session_name,则必须在session_start()之前调用才生效。
6,session_id([string $id])
与session_name()类似,但它是读取或者设置session_id的方法。同样,设置session_id的话,必须在session_start()之前调用才有效。
7,session_set_COOKIE_params()和session_get_COOKIE_params()
通过session_set_COOKIE_params()可以重新设定session.COOKIE_lifetime, session.COOKIE_path以及session.COOKIE_domain这三个php.ini设置。而session_get_COOKIE_params()则是获取这些设定的值。

这里我自己特别去做了一张表,把他们的不同点和相同点总结了一下:


推荐阅读
  • 本文详细介绍如何安装和配置DedeCMS的移动端站点,包括新版本安装、老版本升级、模板适配以及必要的代码修改,以确保移动站点的正常运行。 ... [详细]
  • 随着Linux操作系统的广泛使用,确保用户账户及系统安全变得尤为重要。用户密码的复杂性直接关系到系统的整体安全性。本文将详细介绍如何在CentOS服务器上自定义密码规则,以增强系统的安全性。 ... [详细]
  • JavaScript 跨域解决方案详解
    本文详细介绍了JavaScript在不同域之间进行数据传输或通信的技术,包括使用JSONP、修改document.domain、利用window.name以及HTML5的postMessage方法等跨域解决方案。 ... [详细]
  • 搭建个人博客:WordPress安装详解
    计划建立个人博客来分享生活与工作的见解和经验,选择WordPress是因为它专为博客设计,功能强大且易于使用。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • 解决UIScrollView自动偏移问题的方法
    本文介绍了一种有效的方法来解决在使用UIScrollView时出现的自动向下偏移的问题,通过调整特定的属性设置,可以确保滚动视图正常显示。 ... [详细]
  • 笔记说明重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系& ... [详细]
  • 本文探讨了互联网服务提供商(ISP)如何可能篡改或插入用户请求的数据流,并提供了有效的技术手段来防止此类劫持行为,确保网络环境的安全与纯净。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 服务器虚拟化存储设计,完美规划储存与资源,部署高性能虚拟化桌面
    规划部署虚拟桌面环境前,必须先估算目前所使用实体桌面环境的工作负载与IOPS性能,并慎选储存设备。唯有谨慎估算贴近实际的IOPS性能,才能 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • 3DSMAX制作超现实的体育馆模型
    这篇教程是向脚本之家的朋友介绍3DSMAX制作超现实的体育馆模型方法,教程制作出来的体育馆模型非常地不错,不过教程有点难度,需要有一定基础的朋友学习,推荐到脚本之家,喜欢的朋友可 ... [详细]
  • 本文介绍了如何在AngularJS应用中使用ng-repeat指令创建可单独点击选中的列表项,并详细描述了实现这一功能的具体步骤和代码示例。 ... [详细]
  • 在测试软件或进行系统维护时,有时会遇到电脑蓝屏的情况,即便使用了沙盒环境也无法完全避免。本文将详细介绍常见的蓝屏错误代码及其解决方案,帮助用户快速定位并解决问题。 ... [详细]
author-avatar
书友71794607
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有