Cookie和Session的作用

news2025/1/10 23:31:00

最近学习Session和Cookie的总结,我发现好多做测试的朋友对这个的理解不是那么透彻;如果理解了Cookie和session的原理和使用,在我们的测试工作中,有很大的帮助;尤其是在接口测试,性能测试中。。。

目录

  • 一、为什么要用Cookie和Session?
  • 二、Cookie和Session是什么?
  • 三、怎么使用Cookie和Session?
    • 1、完成Cookie完成记住用户名的功能:
      • ①第一个场景:
      • ②第二个场景:
      • ③代码如下:
    • 2、完成Session验证是否已登录的功能
      • ①第一个场景:
      • ②第二个场景:
      • ③代码如下:
  • 四、Cookie和Session的区别

一、为什么要用Cookie和Session?

很多时候客户端和服务器进行交互使用了HTTP协议,但是HTTP协议是无状态的;HTTP协议的请求过程,是基于 TCP/IP 的,当客户端请求服务器,服务器处理后,进行响应,该过程是无状态的。

但是在有些时候是需要保存一些客户端的请求信息,识别客户端的某些状态,智能的、有针对性的去分析某些客户端的习惯。这些时候,就需要去记录客户端的连接状态,识别请求的状态等。所以为了解决类似的事情,就需要使用到了 Cookie 和 [Session](http://www.xprogrammer.com/906.html)。

比如,使用Cookie的场景:有些网站有记住用户名的功能,当你勾这个的时候,下次进入该网站时,就会保存上一次登录的用户名;使用Seesion的场景:利用Seesion来验证用户是否已登录,利用Session来保存验证码。

二、Cookie和Session是什么?

(1)Cookie:在客户端访问某个地址时,会将请求交到服务器进行处理,在发送请求的时候,浏览器会将页面的头部信息一并的交到服务器端进行处理。在处理的过程中,Cookie 在服务器端生成 ,在此同时,可以将一些需要保存的信息,存放到此 Cookie 中。生成 Cookie 对象时,需要确定具体的名称及具体的值,可以设置当前 [Cookie](http://www.xprogrammer.com/1226.html) 的过期时间,设置过期时间后,就相当于持久化了 Cookie 中的数据,此时的 Cookie 会以之前的 Cookie 名称,保存在客户端。

如果不设置过期时间,则当前 Cookie 的生命期是浏览器会话期间,一旦关闭了该浏览器,当前的Cookie 就会不存在了,此时的 Cookie 信息是保存在内存中。在服务器端,处理完后,会将生成的 Cookie ,随着 Http 响应,会在 Http 响应头中,加上Cookie 信息,浏览器接受到响应后,会按照 Http 响应头里的 Cookie ,在客户端建立 Cookie 。在下次客户进行请求的时候,Http 会附带着已经存储过的 Cookie,一并发送到服务器。一个域,在客户端建立的所以 Cookie 都是可以共享的,只要 Cookie 没有过期。

(2)Session:Session 是在服务器端生成的,存储在服务器端,即存在内存中。可以对生成的 Session 设置过期时间,如果不设置过期时间,默认的 Session 过期时间是30 分钟(在不同的服务器中,它的过期时间略有不同,本文是以 Tomcat 来说的)  但是,Sesssion 的生成的同时,会生成一个与之相关联的的 SessionID ,此 SessionID的存储是需要 Cookie 来完成的。 SessionID 是以名称为 JSESSIONID,其值应该是一个既不会重复,又不容易被找到规律以仿造的字符串。SessionID会随着此次 Http 响应,一并返回到客户端,并保存在客户端中。到当前请求再次发出后,该 SessionID会随着 Http 头部,传到服务器中,服务器依据当前 SessionID 得到与之对应的 Session.

其中:通过 Cookie 的方式存储 Session 状态,只是其中一种方式。如果客户端禁用了 Cookie 的话,很多网站任然可以存储用户的信息。一种处理的方式是URL 重写,将 SesseionID 直接附加在请求地址的后面。另一种处理的方式是,使用隐藏自动的方式。就是服务器自动的在表单中,添加一个隐藏字段,以便在表单提交时,将 SesseionID 一起传到服务器,进行识别。

(3)总结下:Cookie是存在客户端的,比如我们电脑的本地文件中(设置的过期时间的话),在我本地的话(C:\Users\xxx\AppData\Roaming\Microsoft\Windows\Cookies):

也可以在浏览器中看(chrome):

Session是存在服务器端的(我的apche也安装在本地的):

发送请求的时候Cookie会自动把Seesionid带上:

三、怎么使用Cookie和Session?

首先说明下,下面用的是php来写的,之所以写这个过程是加深对Cookie和Session的认识,不会光看理论那里比较抽象。

1、完成Cookie完成记住用户名的功能:

①第一个场景:

输入用户名,选择保存用户名–>提交–>打印设置Cookie成功–>返回登录页面–>用户名会自动填写(只要访问该登录页面,在Cookie有效期内)

这中间设置的Cookie可以在浏览器中查看的:

名字为userName,值为:xiaoshitou,保存时间为:1小时

②第二个场景:

输入用户名,不选择保存用户名–>提交–>打印删除Cookie成功–>返回登录页面–>用户名的值为空(设置的Cookie会被清空)

③代码如下:

(两个文件:saveUserNameView.php、saveUserNameProcess.php):

saveUserNameView.php:(登录页面的代码)

1 <?php
 2 /**
 3  * Created by PhpStorm.
 4  * User: LSH
 5  * Date: 2016/11/25
 6  * Time: 11:12
 7  */
 8 ?>
 9 <html>
10 <head>
11     <meta charset="utf-8">
12     <title>保存用户名</title>
13 </head>
14 <body>
15 <h1>登录页面</h1>
16 <form action="saveUserNameProcess.php" method="post">
17     <table>
18         <tr><td>用户名</td><td>
19                     <input type="text" name="userName" value="<?php if (!empty($_COOKIE['userName'])){echo $_COOKIE['userName'];} ?>"></td></tr>
20         <tr><td>&nbsp码</td><td><input type="password" name="password"></td></tr>
21         <tr><td colspan="2"><input type="checkbox" name="saveUserName" value="saveUserName">保存用户名</td></tr>
22         <tr><td colspan="2"><input type="submit" name="submit" value="提交"></td></tr>
23     </table>
24 </form>
25 </body>
26 </html>

saveUserNameProcess.php:(处理逻辑的代码,保存Cookie,删除Cookie)

1 <?php
 2 /**
 3  * Created by PhpStorm.
 4  * User: LSH
 5  * Date: 2016/11/25
 6  * Time: 11:12
 7  */
 8 
 9 # 获取post提交的信息
10 // 获取用户名
11 if (!empty($_POST['userName'])){
12     $userName = $_POST['userName'];
13 }
14 // 获取密码
15 if (!empty($_POST['password'])){
16     $password = $_POST['password'];
17 }
18 // 获取是否选择保存用户名
19 if (!empty($_POST['saveUserName'])){
20     // 当勾选了,就保存Cookie
21     $saveUserName = $_POST['saveUserName'];
22     // 保存Cookie
23     // userName:设置的Cookie名字
24     // $userName: 用户提交的用户名
25     // time()+60*60: 从当前时间开始算,60*60秒;也就保存Cookie的时间,1个小时候Cookie过期
26     setcookie('userName',$userName,time()+60*60);
27     echo "<br>Set Cookie Success!<br>";
28 }else{
29     // 当用户没有选择 保存用户的时候
30     // 删除Cookie,就是将Cookie的值清掉,把Cookie设置成过期
31     setcookie('userName','',time()-200);
32     echo "<br>Delete Cookie Success!<br>";
33 }
34 // 返回登录页面
35 echo "<a href='saveUserNameView.php'>返回登录页面</a>";

2、完成Session验证是否已登录的功能

①第一个场景:

输入用户名和密码–>提交–>验证成功–>进入管理页面

Login.php(登录页面)—>loginProcess.php(处理登录逻辑页面)—>admin.php(管理页面)

登录验证成功:loginProcess.php 会将用户名保存在session中,并且会向客户端设置Cookie:

服务器端也会报错一个session文件,内容是admin:

在跳转到admin.php的时候,sessionid会带进Cookie中发送给服务器:

②第二个场景:

用户直接访问admin.php管理页面–>直接跳转到登录页面(因为这是非法的,必须登录成功之后才能访问)

当直接访问admin.php页面时,会跳转的登录login.php这样就控制了,只有登录成功的用户才能访问该页面

③代码如下:

Login.php(登录页面)—>loginProcess.php(处理登录逻辑页面)—>admin.php(管理页面)

login.php(登录页面):

1 <?php
 2 /**
 3  * Created by PhpStorm.
 4  * User: LSH
 5  * Date: 2016/11/25
 6  * Time: 14:35
 7  */
 8 ?>
 9 <html>
10 <head>
11     <meta charset="utf-8">
12     <title>保存用户名</title>
13 </head>
14 <body>
15 <h1>登录页面</h1>
16 <form action="loginProcess.php" method="post">
17     <table>
18         <tr><td>用户名</td><td><input type="text" name="userName"></td></tr>
19         <tr><td>&nbsp码</td><td><input type="password" name="password"></td></tr>
20         <tr><td colspan="2"><input type="submit" name="submit" value="提交"></td></tr>
21     </table>
22 </form>
23 </body>
24 </html>

loginProcess.php(判断用户名是否正确,设置session)

1 <?php
 2 /**
 3  * Created by PhpStorm.
 4  * User: LSH
 5  * Date: 2016/11/25
 6  * Time: 14:41
 7  */
 8 # 获取post提交的信息
 9 // 获取用户名
10 if (!empty($_POST['userName'])){
11     $userName = $_POST['userName'];
12 }
13 // 获取密码
14 if (!empty($_POST['password'])){
15     $password = $_POST['password'];
16 }
17 
18 if ($userName == 'admin' && $password == '123456'){
19     // 用户名为: admin;密码为: 123456
20     // 登录成功,跳转到管理页面:admin.php
21     header("Location: admin.php");
22     // 设置session
23     session_start();
24     $_SESSION['userName'] = $userName;
25 }else{
26     // 用户名和密码错误时,返回登录页面
27     header("Location: login.php");
28 }

admin.php(根据session来验证用户是否登录,未登录跳转到登录页面,进行登录)

1 <?php
 2 /**
 3  * Created by PhpStorm.
 4  * User: LSH
 5  * Date: 2016/11/25
 6  * Time: 14:37
 7  */
 8 // 获取Session 中的userName
 9 session_start();
10 if (!empty($_SESSION['userName'])){
11     // 当userName 有值的时候,就打印欢迎,既然管理页面
12     echo $_SESSION['userName'].",welcome to my system!";
13     echo "<h1>管理页面</h1>";
14 }else{
15     // 当$_SESSION['userName'] 为空的时候,说明用户非法访问管理页面
16     // 跳转到登录页面
17     header("Location: login.php");
18 }

四、Cookie和Session的区别

1、Cookie是存在客户端,Session存在服务器

2、安全性要求高的用Session,要求低用Cookie

3、Cookie只能存储字符串,Session可以存储任何信息

4、Cookie如果不设置时间,当关闭浏览器时,Cookie就失效,不会在本地保存;Session的生命周期是一个会话(当启动浏览器到关闭浏览器)

5、在存储相对持久的信息时,应考虑使用 Cookie,因为 Cookie 可以以文件的形式,存储在客户端。在进行一些登录的验证及信息拦截的时候,可以使用 Session。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1037643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

报错注入

1.原理 2.注入手法

tomcat线程模型

NioEndpoint组件 Tomcat的NioEndpoint实现了I/O多路复用模型。 工作流程 Java的多路复用器的使用&#xff1a; 创建一个Selector&#xff0c;在其上注册感兴趣的事件&#xff0c;然后调用select方法&#xff0c;等待感兴趣的事情发生感兴趣的事情发生了&#xff0c;比如可读…

java Spring Boot日志输出格式配置方法

前面 我们文章中 我们已经能把日志控制住了 但前面这些信息 又是什么呢&#xff1f; 如果不了解日志 看起来是挺痛苦的 其实 我们可以将日志分为 一下几个部分去读它 首先是这个日志的输出时间 是在什么时候发生的 然后是 日志的基本 之前我们也讲过 有信息 报错 警告等 然后…

适用于初学者,毕业设计的5个c语言项目,代码已开源

C语言项目集 项目介绍 该项目适用于初学者学习c语言&#xff0c;也适用于高校学生课程设计&#xff0c;毕业设计参考。 项目并不能满足所有人的需求&#xff0c;可进行项目指导&#xff0c;定制开发。 开源地址 c语言项目代码地址 项目列表 该项目包含如下5个管理系统&am…

ESP8266使用记录(三)

通过udp把mpu6050数据发送到PC端 /********************************************************************** 项目名称/Project : 零基础入门学用物联网 程序名称/Program name : ESP8266WiFiUdp_12 团队/Team : 太极创客团队 / Taichi-Maker (w…

【视频处理】通过调用图像来重建新影片及计算颜色通道的平均灰度值,并检测帧与前一帧之间的差异(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

网易云信4K 8K RTC助力远程医疗的技术实践

// 编者按&#xff1a;随着近年来国家关于缓解医疗资源分配不均的一系列政策出台&#xff0c;远程医疗作为平衡医疗资源分配的有力手段&#xff0c;目前正处于强劲发展阶段。网易云信运用超高清RTC视频技术助力医疗行业实现了远程高清视频病理分析和手术示教等能力。LiveVide…

Beyond Compare 4对比工具注册

Beyond Compare是一款文件及文件夹&#xff08;目录&#xff09;的对比工具。 Beyond Compare不仅可以快速比较出两个目录的不同&#xff0c;还可以比较每个文件的内容&#xff0c;而且可以任意显示比较结果。 Beyond Compare程序内建了文件浏览器&#xff0c;方便您对文件、…

NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061

今天发现,有两个处理器,启动以后,数据流不过去,后来,锁定问题在,queue队列上面,因为别的队列都可以通过,右键,empty queue清空,就是 这个队列不行,这个队列无法被删除,至于为什么导致这样的, 猜测是因为之前,流程设计好以后,队列没有设置背压,也没有设置队列中的内容大小和fl…

基于人脸5个关键点的人脸对齐(人脸纠正)

摘要&#xff1a;人脸检测模型输出人脸目标框坐标和5个人脸关键点&#xff0c;在进行人脸比对前&#xff0c;需要对检测得到的人脸框进行对齐&#xff08;纠正&#xff09;&#xff0c;本文将通过5个人脸关键点信息对人脸就行对齐&#xff08;纠正&#xff09;。 一、输入图像…

nginx实现反向代理实例

1 前言 1.1 演示内容 在服务器上访问nginx端口然后跳转到tomcat服务器 1.2 前提条件 前提条件&#xff1a;利用docker安装好nginx、tomcat、jdk8&#xff08;tomcat运行需要jdk环境&#xff09; 只演示docker安装tomcat&#xff1a; 默认拉取最新版tomcat docker pull t…

学习 OpenStack 的新指南和教程的六个建议

云基础设施是一个非常需要的技能。如果你正在为你的云基础架构需求寻找开源解决方案&#xff0c;那么 OpenStack 就是其中之一。OpenStack 是一个巨大的项目集合&#xff0c;为云服务的几乎每一个部分都提供了解决方案和集成。虽然这个巨大范围使得它成为一个强大的工具&#x…

若依前后端分离版搭建记录

一、如果是mysql8&#xff0c;得修改一下参数allowPublicKeyRetrieval为true&#xff0c;不然会报Public Key Retrieval is not allowed错误&#xff1a; 二、导入第二张表的数据库的时候&#xff0c;需要增加“--default-character-setutf8”参数才不会报错&#xff1a;

爱心助力口腔健康——三金西瓜霜全国“爱牙公益行”活动启动

在第35个“全国爱牙日”来临之际&#xff0c;三金西瓜霜牙膏联合中国善网公益平台共同发起的第四届三金西瓜霜“爱牙公益行”活动于近日启动。 今年“爱牙日”主题是“口腔健康 全身健康”&#xff0c;副主题是“关爱老年口腔乐享健康生活”。口腔健康是人体健康的重要组成部分…

两种常见矩形框旋转方法推导及其C++实现

在已知矩形中心点、长宽和旋转角度&#xff08;定义为矩形最长边与X轴正方向的夹角&#xff09;&#xff0c;如何确定矩形四个顶点的坐标&#xff0c;通常有以下两种处理方法。 法一&#xff1a;直接对顶点进行旋转 比如下图虚线框矩形是实线框矩形绕矩形中心点旋转后得到。在…

贴片电容耐压值选取和特性(包含实际电路和PCB)

一、一般电容的特性 ①容值大的电容&#xff0c;一般通低频率&#xff1b;  ②容值小的电容&#xff0c;一般通高频率。   注&#xff1a;详细请看这位博主的篇文章&#xff1a; 大电容为什么虑低频小电容为什么又虑高频?(个人整理) 二、贴片电容的耐压选取 ①贴片电容有2…

“构建完善的用户认证与数据交互系统“

目录 引言1.ElementUI完成登录注册1. 登录页面设计与实现2. 注册页面设计与实现 2.axios之get请求3.axios之post请求4.跨域问题的解决方案5.总结 引言 在现代Web应用程序开发中&#xff0c;用户认证和数据交互是至关重要的功能。本文将介绍如何使用ElementUI、axios和解决跨域…

PyTorch 模型性能分析与优化--第1部分

一、说明 这篇文章的重点将是GPU上的PyTorch培训。更具体地说&#xff0c;我们将专注于 PyTorch 的内置性能分析器 PyTorch Profiler&#xff0c;以及查看其结果的方法之一&#xff0c;即 PyTorch Profiler TensorBoard 插件。 二、深度框架 训练深度学习模型&#xff0c;尤其是…

Understanding Host Network Stack Overheads论文阅读笔记

RFS (Receive Flow Steering) RFS&#xff08;Receive flow steering&#xff09;和 RPS 配合使用。RPS 试图在 CPU 之间平衡收包&#xff0c;但是没考虑 数据的本地性问题&#xff0c;如何最大化 CPU 缓存的命中率。RFS 将属于相同 flow 的包送到相同的 CPU 进行处理&#xf…