【PHP面试题】简述 cookie 和 session的区别及各自的工作机制,存储位置等,简述 cookie 的优缺点。

java面试题59cookie和session区别 Cookie和Session是HTTP协议中跟踪用户状态的两种技术,主要区别在于:Cookie存储在客户端浏览器,安全性较低但有持久性;Session存储在服务器端,通过唯一ID识别用户,安全性更高但占用服务器资源。Cookie适合存储非敏感信息(如用户偏好),Session适合存储敏感数据(如登录状态)。Session通常依赖Cookie传递ID,两者配合使用可构建安全可靠的Web应用。选择时需根据数据类型、安全性需求及性能要求综合考虑。 阅读详情

一、考点

1、PHP的会话控制技术

1) 为什么要使用会话控制技术?
  • 本身我们的Web是通过 HTTP协议来实现的,而HTTP协议是无状态协议(即HTTP协议没有一个内件机制来维护两个事物之间的状态),所以同一个用户在请求相同的页面两次的时候,HTTP协议不会认为这两次请求都来自于同一个用户,会把它们当做是两次请求的独立(即会将两次请求隔离开),会认为是两个不同的用户请求的。如果用户执行了登录操作,再次请求页面,HTTP协议不会认为该用户之前登录过,因为它无法保持该用户之前的登录状态,所以无法在不同页面之间进行用户的跟踪和状态的保持。
  • 而对于我们的会话控制技术来说,就是为了解决这样的问题。所以会话控制技术的思想是:允许服务器跟踪同一个客户端做出的连续请求。(即之前做过登录,下一次再进行请求的时候,就会知道之前已经登录过,不需要再登录,这一可以保持用户的状态,从而完成登录状态的保持。)
2) 会话控制技术的实现方式

① 通过 GET 参数传递

如:在 页面一 中做了一个登录,用户的登录信息已经存在,跳到 页面二 中的时候,继续把刚才的登录信息传到 页面二 中,这个时候服务端在进行处理的时候,就会发现该用户刚刚在 页面一 中已经登录过了。这种方式可以通过GET参数进行传递,但是这样会有一些问题。

通过GET参数传递可能存在的问题:

  • 信息不安全,都暴露在了URL地址栏中;
  • 在传递的过程中,可能会出现参数丢失的现象,这样登录信息也会被丢失。

因此,通过GET方式传递这种方法不推荐使用


② Cookie

工作原理

cookie的工作原理:是一种由服务器发送给客户端的片段信息,存储在客户端浏览器的内存或硬盘当中的技术。【可以把它当做是存储在浏览器中的一个文件,这个文件中包含我们客户端的一些片段的信息(如:登录或存储的一些其他信息等),它就是一个文件,这个文件是存储在客户端的!!!】

切记,切记,切记:

存储在客户端!!!

存储在客户端!!!

存储在客户端!!!

举例说明

用户去超市购买东西,购买完之后办理了会员卡,这个过程中:

  • 超市 可以理解成是 服务器,
  • 用户 可以理解成是 客户端,
  • 会员卡 可以理解成时 Cookie。

即存储在客户端中的文件,就是会员卡,这张会员卡中存储着用户的基本信息,这些基本信息就是用户的状态信息。(如:我们做登录,就可以把登录的状态保存在 cookie的文件里)

Cookie 的操作

/* 
 * 写操作
 * $name 	键名
 * $value	值
 * $expire	过期时间
 * $path    有效的服务器路径
 * $domain  有效的域名/子域名
 * $secure  设置该cookie是否仅通过安全的HTTPS连接传给客户端
 */
setcookie($name, $value, $expire, $path, $domian, $secure);

// 读取 cookie
$_COOKIE;

// 设置 cookie
setcookie('a[b]', 'val');

// 删除 cookie
setcookie($name, '', time()-1000); // 此处减去多少都可以,只要保证cookie过期,就表示已经删除
  • Cookie 的优点和缺点
  • cookie的优点:因为cookie是将信息存储在客户端,因此不会占用服务器的资源(即不会浪费服务器的资源),效率会高一些。
  • cookie的缺点:也是因为其存储在客户端,由于我们的信息全部保存在客户端计算机中,所以不建议将一些敏感重要的数据保存到cookie当中,而且用户有权限禁止cookie的使用。如果我们在浏览器中,将cookie禁止掉,一旦用户禁止cookie,我们没有办法去保存用户的信息。

③ Session

session的工作原理:将使用者相同的资料存储在服务器中,这样用户无法禁用session的使用。

注:session 并不是完全脱离 cookie的,而是基于 cookie的。

举例说明

用户去超市购买东西,购买之后超市给用户办了会员卡,会员卡是一个电子卡,只要输入用户的身份证号就可以使用该会员卡进行打折优惠。在此过程中:

  • 超市 -> 服务器
  • 用户 -> 客户端
  • 会员卡 -> 由于没有实质的会员卡,我们拿到的是一个电子卡,会员卡信息是用户状态的信息,该信息是 存储在服务器的

与cookie不同的是,电子卡是由服务器端进行保存的,是由超市进行保存的。用户每次来购物,只需要报自己的身份证号就可以了,该身份证号,叫 sessionId,而这个 sessionId 是存储在 cookie 中的。如果 cookie 被禁用,可以通过 URL 来传递 sessionId 的形式保存 session的状态。

因此 session 是基于 cookie 的,session 的信息都存储在服务器中的一个文件中,不存储于客户端文件中。每当用户想去读取 session 的内容时,首先会去拿到浏览器中携带 sessionId 的 cookie, 我们根据这个 sessionId 找到对应的 session 文件,将里面的内容读取出来。

  • Session 的操作
// 开启 session
session_start();

// 使用 session
$_SESSION;

// 销毁 session【将session中的内容情况】
$_SESSION = []; // 或者 $_SESSION = null;

// 删除 session 文件
session_destroy(); // 删除 session文件,且将 sessionId 对应的 cookie文件一并删除掉
  • Session 的配置
在 php.ini 中有一些关于 session 的配置:
1) session_auto_start	  // 自动开启 session
2) session_cookie_domian  // 存储 sessionId 的那个 cookie 的有效域名
3) session_cookie_lifetime
4) session_cookie_path
5) session.name
6) session.save_path 	  // session 文件在服务器中的存储路径
7) session_use_cookies    // 是否使用 cookie 来传递 sessionId
8) session_use_trans_sid  // 是否可以使用传递的方式来传递 sessionId
9) session_save_handler   // session 存储的句柄是什么【可以将 session存储到 memcache/redis/mysql,可以在此处进行配置】

在 php.ini 中,还有关于 session 的三项配置,是用来配合使用,来进行垃圾回收的。

session.gc_probability; 
session.gc_divisor;
session.gc_maxlifetime;

如果用户直接关闭了浏览器,而不退出,会永久的保持在服务器中,这个时候,就需要去配置垃圾回收,会把一些 session 文件给清除掉,定时去清除。去配置我们的配置:

session.gc_probability = 1
session.gc_divisor = 100
session.gc_maxlifetime = 1440

表示如果超过 过期时间 1440,则 每 100 次 清理 1次。


原理:
每 100次去调用 session_start()的时候,会有一次去清理文件,清理的是 当前时间的时间戳 - 文件最后的修改时间 > 1440s 的,说明该文件就已经过期,我们就将其清除掉。(如果将 session.gc_divisor = 1,每次去调用 session_start() 时,都会去清理一遍文件,清理一遍所有过期的 session文件)【此处不推荐将 session.gc_divisor 的值配置的特别小,如果配置的特别小,当去执行 session_start() 的时候,就会去消耗我们服务器的资源,会降低我们的效率】

  • Session 优点和缺点
  • session的优点:信息非常的安全,都是存储在服务器端的,客户端不可能拿到 session 的数据。
  • session的缺点:会占用服务器的资源(session文件越来越多,可能某一天会占满磁盘),并且它的分布式也是一个问题(如:将来我们可能会有多台 web服务器,但是 session 可能是存储在其中一台,而另外一台是没有办法去使用的。这种情况下,我们可以使用 redis,不管在哪台服务器,都可以去调用 redis 的服务器,就可以达到信息共享)。
  • 传递 SessionID 的问题【重点】

由于 session 是基于 cookie的,cookie 中存储了 sessionId,如果我们把 cookie 禁用掉,也就意外着我们的 sessionId 无法进行传递,即没有办法找到保持 session文件 的一个状态。

  • 传递 SessionID 的方式【重点】

使用 session_name() 和 session_id() 函数进行传递

<a href="1.php">下个页面</a>

让该标签跳转到 1.php 页面,默认情况下,跳转到下一个页面,sessionId 存储在 cookie中,到下一个页面的时候,可以从 cookie 中拿到 sessionId,然后去找 session 文件,将我们的登录信息读取出来。但如果把 cookie 禁用掉,此时 sessionId 无法取出,也即 session的信息也无法取出。

解决方法:

// 只要用该方法进行传递,哪怕没有 sessionId,到下一个页面的时候,也会去服务器中找以 sessionId的值 为文件名 的文件,并将里面的信息读取出来

// 此处不可以用 PHPSESSION=sessionId的值这样的形式来写【错误写法】
<a href="1.php?PHPSESSION=sessionId的值">下个页面</a>

注:如果大家进行分析过,就不容易发现,sessionId的值 就是 session文件的名称,文件的默认名称为:sess_sessionid的值。

正确写法1:

<a href="1.php?<?php echo session_name().'='.session_id(); ?>">下个页面</a>

此处的 session_name 就是 php.ini 配置文件中的 session.name的值(即默认情况下 PHPSESSID);此处的 session_id 就是 登录之后上传的那个新的 session文件的ID的值。

正确写法2:【推荐使用】

<a href="1.php?<?php echo SID; ?>">下个页面</a> 

常量 SID 就是 session_name() 和 session_id 的拼接。


SID 的特性:

  • 如果开启了 cookie,SID为空;
  • 如果未开启 cookie(cookie被禁用掉了),此时 SID才是 session_name() 和 session_id()字符串的拼接。

  • Session存储

出现的问题

假设有5台 web服务器,有其中一台存储了 session,在登录的是否访问了5台中的一台,即登录的信息存储在了5台中的第一台服务器中,但是当跳转到下一个页面时,有可能就被轮询到了第二台服务器中,在第二台服务器上,我们去寻找 sessionId对于的那个 session文件的时候,无法找到。因为 session文件是在第一台服务器中存储着。

解决方法:

建议不要将 session以文件的形式进行存储,可以存储到我们的内存服务器中(如:memcache/redis/mysql)。

通过session_set_save_handler()存入 MySQL、Memcache、Redis等。

二、解题方法

充分理解 Session 和 Cookie 的工作原理


三、真题

Session信息的存储方式,如何进行遍历?
// 存储方式:默认情况下存储到服务器的文件中,还可以通过 session_set_save_handler()存储到Mysql/Memcache/redis

// 遍历方式
$_SESSION;
分享一波腾讯PHP面试题 1.php 的垃圾回收机制 PHP 可以自动进行内存管理,清除不需要的对象。PHP 使用了引用计数 (reference counting) GC 机制。每个对象都内含一个引用计数器 refcount,每个 reference 连接到对象,计数器加 1。当 reference 离开生存空间或被设为 NULL,计数器减 1。当某个对象的引用计数器为零时,PHP 知道你将不再需要使用这个对象,释放其所占的内存空间。 2. session 与 cookie 的区别和联系 区别: 1.存放位置:Session 保 阅读详情

相关推荐

多仓智能订单路由与动态优化方案设计

现在有很多商家会有多个仓库,并分布在不同的城市中,当用户下单后会根据商品库存及订单信息将订单分配到对应的仓库进行发货,如就近原则,本期基于多仓库设计一套订单路由方案,包含核心逻辑、规则优先级和实施方案,适用于多仓协同的订单自动分配场景

14年产品经理老兵,想把自己的经验及总结分享给大家,只讲思路及实操,不讲废话 2481

php session控制,PHP 会话控制 cookie 与 session 全解析

Cookie 简介Cookie是存储在客户端浏览器中的数据,我们通过Cookie来跟踪与存储用户数据。一般情况下,Cookie通过HTTP headers从服务端返回到客户端。多数web程序都支持Cookie的操作,因为Cookie是存在于HTTP的标头之中,所以必须在其他信息输出以前进行设置,类似于header函数的使用限制。PHP通过 setcookie 函数进行Cookie的设置,任何从浏览...

weixin_34070026的博客 258

TOPSIS+熵权法组合拳:5分钟学会供应商选择决策模型

本文详细介绍了如何运用TOPSIS和熵权法这对黄金组合,快速构建科学、客观的供应商评估决策模型。通过数据标准化、权重计算和综合排序,帮助企业在半小时内完成高效、准确的供应商选择,解决传统主观打分法的弊端,提升供应链管理效率。

weixin_29051149的博客 277

PHP中的会话控制(一):cookie

什么是会话控制 会话控制是一种面向连接的可靠通信方式,通常根据会话控制判断用户登录的行为。 会话控制的思想就是允许服务器跟踪同一个客户端做出的连续请求。 会话控制可以记录客户登录行为,所以不必每浏览一个页面都去重复登录。对于同一个用户的请求还可以在多个页面之间为其共享数据。 两种会话控制方式:cookie和session。 什么是cookiecookie是一种有服务器发送给客户端的一段信息,储存在客

taihet的博客 490

Python海康相机api---超简单入坑学习必看

海康官网下载相机驱动​安装好以后找到Python的开发文件目录参考:D:\MVS\MVS\Development\Samples\Python\MvImport这几个文件很重要,想调用海康相机取图会用到.​为了写代码方便可以把这几个文件拷贝一下,跟你的api主文件放在同一个文件夹下可以减少80%的烦恼.​。

weixin_59360687的博客 3478

ROS学习笔记之——无人机PID调参过程记录

For cooperaive inquiries, please visit the website:guanweipeng.com

gwpscut的博客 6829

Cookie/Session机制详解

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。 本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session。 1.1  Cookie机制 在程序中,会话

瞧字不识 46万+

从JT808/JT1078协议到多端协同:构建高并发北斗车辆监控平台的技术实践

本文详细介绍了基于JT808/JT1078协议构建高并发北斗车辆监控平台的技术实践,包括协议解析、高并发架构设计、多端协同实现及数据持久化策略。通过Netty、Kafka等技术优化,系统成功支撑日均2000万条消息处理,为GPS车辆动态监控系统提供了可靠解决方案。

weixin_28358083的博客 224

简述cookie和session机制

首先来说说HTTP协议,我们知道HTTP协议是无状态的,意思就是说我们每一次发出的HTTP请求之间都是没有关联的,对于服务且而言,就算是同一个人在不停的发出HTTP请求访问网页,服务器也不知道是同一个人在访问。 但是在很多网页中都涉及到了登录注册的功能,用户登录后,就算请求该网站的其他页面,服务器也都会知道是你这个用户,从而返回相应的网页给你。但是前面说到了HTTP协议是无状态的,那么这是怎么实...

heibuliuqiu_gk的博客 1310

在Keil下完成一个汇编程序的编写

在学习STM32的路上开始是学的C语言尚未进行对汇编进行学习,因此抽出时间来学习一下在keil下的汇编语言。

Liu-FE的博客 1万+

【2DWT:2维离散小波变换(附Pytorch代码)】

图像信号具有非平稳特性,无法使用一种确定的数学模型来描述,而小波变换的多分辨率分析特性很好地解决了这个问题。小波变化的多分辨率特性使其既可以高效描述图像的平坦区域(低频信息、全局信息),也可以有效处理图像信号的局部突变(高频信息,即图像的边缘轮廓等部分)。小波变换在空域和频域同时具有良好的局部性,使其可以很好地聚焦到图像的任意细节。

NorthSmile的博客 1万+

面试-PHP篇-cookie和session

面试-PHP篇-cookie和session

张罗丰的博客 488

001、专栏导论:为什么我们需要MLIR与算子中间表示

五年前,大家还在争论“TVM还是XLA”。现在回头看,TVM的Relay IR和XLA的HLO都是特定领域的IR,它们解决了各自的问题,但缺乏通用性。MLIR的出现,本质上是因为硬件异构化已经到了一个临界点——CPU、GPU、NPU、DSP、FPGA,每个硬件都有自己的指令集和内存层次,没有一个统一的IR能同时高效表达所有硬件的计算模式。MLIR的“方言+渐进式lowering”模式,恰好提供了这种灵活性。你可以为每个硬件定制一套方言,然后共享公共的lowering路径。

Jack010169的博客 488

Session是怎么实现的?存储在哪里?

目录目录 前言 为什么有session 如何实现session的共享 SESSION 的数据保存在哪里呢 PHP中的session存储 Java中的session存储 博主注前言  文章内容转载或摘录自,如下文章。最后将在文末【博主注】这一部分,指出一些需要注意的地方。 阿里面试题————-session是怎么实现的?存储在哪里? SESSION 的数据保存在哪里呢? sessionid如何产生?

梦空间 11万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

PHP面试题精讲—Session会话完全解析!亲测有效!建议收藏!

日拱一卒无有尽,功不唐捐终入海 ???? 目录1.SESSION 是什么?2. PHP中如何启用session?安装脚本中启用数据的存取生命周期3.SESSION和COOIKE的关系?4. 禁用SESSION的话COOKIE可用吗?5. 如何限制SESSION的过期时间严格30分钟?6. 怎么多台服务器共享SESSION?总结 1.SESSION 是什么? 我们说的SESSION指的是SESSION对象,用于存储用户信息。 当web和服务器通信时,就会产生一个session对象,当会话过期之后,sess

Code Metaverse 1528

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【接口测试】3_代码实现 _Cookie和Session

本文介绍了Cookie和Session的基本概念及区别。Cookie是存储在浏览器端的无状态技术,默认大小4KB,存储非敏感数据如用户名等;Session则会话数据存储在服务器端,安全性高且无大小限制。文章通过TPshop商城登录案例,演示了Cookie+Session认证流程:首次请求生成session_id并存入Cookie,后续请求自动携带。同时展示了使用requests.Session()自动管理Cookie的代码实现,相比手动处理Cookie更加简便。最后从存储位置、安全性、数据类型和大小四个方面

即使是不成熟的尝试,也胜于从不执行的策略。 1330

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

php Session是怎么实现的?存储在哪里?

目录目录前言为什么有session如何实现session的共享SESSION 的数据保存在哪里呢PHP中的session存储Java中的session存储博主注 目录 前言 为什么有session 如何实现session的共享 SESSION 的数据保存在哪里呢 PHP中的session存储 Java中的session存储 博主注 前言   文章内容转载或摘录自,如下文章。最后将在文末【博主注】这一部分,指出一些需要注意的地方。 阿里面试题————-session是怎么实现的?存储在哪里? SESSION

weixin_41045487的博客 468

【Java 基础面试问题】Cookie 和 Session 的区别

Cookie 和 Session 的区别 什么是HTTP 超文本传输协议,是一种用于分布式、协作式和超媒体信息系统的应用层协议。 设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。 HTTP 是无状态协议,说明它不能以状态来区分和管理请求和响应。也就是说,服务器单从网络连接上无从知道客户身份。 就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己

your_棒棒糖的博客 174

2021年3月phper必看的PHP面试题(附答案)

金三银四已经开始了,所以花时间搜集整理出来了这套面试题大全,希望对你有用~ 另外还将大量面试题整理成了一个PHP面试手册,是PDF版的。 关注微信公众号:PHP大神,然后回复“面试手册”即可获取~ 1. 什么是面向对象?主要特征是什么? 面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。主要特征:封装、继承、多态。2. SESSION 与 COOKIE的区别是什么,请从协议,产生的原因与作用说明? 1)、http无状态协议,不能区分用户是否是从同一个网站上来的,同一个用户请求不

weixin_55305220的博客 7760

2020最新PHP面试题(附带答案)

1.什么是面向对象?主要特征是什么? 面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。主要特征:封装、继承、多态。 我的官方群点击此处。 2.SESSION 与 COOKIE的区别是什么,请从协议,产生的原因与作用说明? 1、http无状态协议,不能区分用户是否是从同一个网站上来的,同一个用户请求不同的页面不能看做是同一个用户。 2、SESSION存储在服务器端,COOKIE保存在客户端。Session比较安全,cookie用某些手段可以修改,不安全。Session依..

weixin_45789931的博客 1万+

Session是怎么实现的 存储在哪里

Session是怎么实现的 存储在哪里

qq_43685640的博客 704

达内php面试题,合肥PHP培训分享几个PHP基础面试题

本文合肥PHP培训分享几个PHP基础面试题,希望对正在找工作的同学有所帮助。1、SESSION与COOKIE的区别是什么,请从协议,产生的原因与作用说明?(1)、http无状态协议,不能区分用户是否是从同一个网站上来的,同一个用户请求不同的页面不能看做是同一个用户。(2)、SESSION存储在服务器端,COOKIE保存在客户端。Session比较安全,cookie用某些手段可以修改,不安全。Ses...

weixin_35794740的博客 175

2021年PHP常见面试题型超全汇总(一)

如果你正在寻找PHP开发的工作,那么提前掌握最新的PHP面试题技巧,必然能使你在求职过程中事半功倍。博主整理了最全面的PHP面试题,包括PHP基础面试题、PHP高级面试题以及PHP常见面试题! 关注微信公众号 “PHP大神” 回复“面试题”可以免费下载更多php相关面试题,整理不易请多关注,如有错误请多包涵哈! 1、冒泡排序,面试前一定要记住哦! function maopao($arr) { $len = count($arr); $n = count($arr) - .

weixin_55305220的博客 715
上一篇: 【PHP面试题】不断在文件 hello.txt 头部写入一行 "Hello World" 字符串,要求代码完整。
下一篇: 【PHP面试题】PHP的类权限控制修饰符
studyphp123
博客等级 码龄9年 85粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值