cookie 和session 的区别详解

2023-11-05

原文地址:http://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html

这些都是基础知识,不过有必要做深入了解。先简单介绍一下。

二者的定义:

当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,

都纪录下来。当下次你再光临同一个网站,WEB 服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie

里的内容来判断使用者,送出特定的网页内容给你。 Cookie 的使用很普遍,许多有提供个人化服务的网站,都是利用 Cookie

来辨认使用者,以方便送出使用者量身定做的内容,像是 Web 接口的免费 email 网站,都要用到 Cookie。


具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案

同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制

来达到保存标识的目的,但实际上它还有其他选择

cookie机制。正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示

浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。而cookie的使用

是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围

大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。
 
cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这

个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。

会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie

保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏

览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式

session机制。session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。

          当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识

(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来

使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相

关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应

中返回给客户端保存。保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给

服务器。一般这个cookie的名字都是类似于SEEESIONID。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时

仍然能够把session id传递回服务器。

经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段。就是服务器

会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。比如:
<form name="testform" action="/xxx">
<input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764">
<input type="text">
</form>
实际上这种技术可以简单的用对action应用URL重写来代替。

cookie 和session 的区别:

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
   考虑到安全应当使用session

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
   考虑到减轻服务器性能方面,应当使用COOKIE

4、单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。

5、所以个人建议:
   将登陆信息等重要信息存放为SESSION
   其他信息如果需要保留,可以放在COOKIE中


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cookie 和session 的区别详解 的相关文章

  • 创建持久的 php 登录 cookie 会话

    我试图让我的登录会话持续更长时间 这样人们就不会过早退出我的网站 例如 制作一篇博客文章并在提交时丢失 因为 php 的 cookie 过期了 理想情况下 我想给他们一个 2 小时的会话 他们不会注销 每次加载页面时都会刷新 下面的代码片段
  • 致命错误:无法在functions.php第25行中重新声明session_start()

    当我尝试让登录部分正常工作时遇到问题 我不断遇到的问题是 致命错误 无法在 public html login functions php 第 25 行重新声明 session start
  • 使用 google app-engine 跨浏览器/服务器重新启动会话持久性

    如何使会话在浏览器 服务器重新启动后持续存在 我正在使用谷歌应用程序引擎 每次重新启动浏览器和 或服务器时 我都会得到一个新的会话 ID String jSessionId this getThreadLocalRequest getSes
  • Rails 3 session_store 域 :all 的作用是什么?

    更新了问题以使其更清楚 据我所知 您可以设置 session store 的域以在子域之间共享会话 如下所示 Rails application config session store cookie store key gt my key
  • Symfony2 - 访问被拒绝(用户未经过完全身份验证)

    我正在使用 Symfony2 开发一个网站 直到今天 登录没有问题 但现在登录时我没有正确验证 Symfony 分析器将我列为logged in as anon而不是我登录的用户 我还被重定向回登录页面而不是目标路径 登录过程由传统的登录表
  • 为什么呼叫会话不起作用? (代码点火器 3)

    我的配置是这样的 config sess driver database select database driver config sess save path ci sessions name of the mysql table co
  • 关于 PHP 范围的问题 - 从 Java 程序员的角度来看

    我对 PHP 还很陌生 所以我试图理解 PHP Web 应用程序中的范围概念 在 Java 世界中 Java Web 应用程序 使用 Java Server Pages JSP 及以上 将允许 Java Bean 具有以下级别的范围 Pag
  • 经典的 asp/vbscript - 使用正则表达式修改所有 href

    在经典 ASP VB 脚本 中 我需要通过对当前 url 进行编码并在其前面挂起来修改字符串中包含的多个不同的 href 基本上 我想让所有的 href 都通过我的redirect asp 并将现有的 href 编码传递到新链接中 例如 现
  • 如何在 Express 4.0 中发送 Flash 消息?

    因此 我的 Web 应用程序需要身份验证 并且我有一个注册页面 如果用户尝试使用数据库中已有的电子邮件进行注册 我想向他们显示一条错误消息 我正在尝试在 html 端使用此代码来执行此操作 div class alert alert dan
  • Laravel,2 个域中的 2 个项目同一会话

    我正在 2 个不同的域 domain1 tld 和域 2 tld 中创建 2 个项目 domain1 tld 是主要事件生成器页面 domain2 tld 是其事件之一 我想共享相同的会话 它们实际上共享相同的数据库和相同的 apache
  • PHP 会话中的数据错误

    我对网上商店进行了以下设置 当用户登录时 通过 AJAX 调用脚本 该脚本根据 SOAP Web 服务验证用户数据 并返回用户数据 当用户登录时 用户数据保存在 PHP 会话中 用户数据 仅通过 SOAP 检索 而不由商店存储 我使用默认的
  • PHP if in_array 表示多个值

    我有一个由 3 到 12 个值之间的任意位置生成的数组 它根据帐户信息生成该数组 result ad gt user gt groups user username 我想检查这个数组是否有多个值 大约 4 或 5 个 如果其中有任何一个值
  • PHP session.cookie_secure:设置为 true 时禁用会话

    当我设置以下配置时 ini set session cookie secure 1 我的整个应用程序的会话被禁用 我无法再写入或读取会话变量 sessionName us session name sessionName ini set s
  • 如何使用express在node.js中使浏览器关闭后会话过期?

    我在用 req session cookie maxAge 14 24 3600 1000 0 让会话在两周后过期 但现在我想让它在浏览器关闭后过期 有什么办法可以做到吗 来自连接会话中间件文档 https github com expre
  • ASP.NET Core 会话超时

    我记得我们在 ASP NET 中使用了 session timeout 来更改会话超时 如果不更改 则为 20 分钟 我尝试在 Startup cs 中更改 ASP NET Core 3 1 中的会话超时 但没有任何反应 我对操作员使用身份
  • 连接多个用户的 R 闪亮会话

    最小可重现示例 library shiny ui lt fluidPage actionButton button1 Run 1 actionButton button2 Run 2 server lt function session i
  • 如何从 HTA 中启动批处理文件

    我有一个基本的 HTA 其中我尝试通过按钮启动批处理文件 但是当我尝试启动批处理文件时 它不会运行 当我按下按钮时 将启动命令提示符窗口 但不会运行脚本 这是代码的简单示例
  • 在会话 cookie 中存储大量数据会产生什么影响?

    谁能解释一下在会话中存储大量数据的缺点或给我指出一些阅读材料 我也很感兴趣在会话中存储数据和从数据文件读取数据之间是否有任何区别 如果您在会话中存储大量数据 则输入 输出性能会下降 因为会有大量读取 写入 默认情况下 PHP 中的会话存储在
  • session_regenerate_id 没有创建新的会话 id

    我有一个脚本 旨在完成当前会话并开始新的会话 我使用了一段代码 它在我的开发计算机上运行良好 但是 当我将其发布到生产服务器时 会话 ID 始终保持不变 以下是我重新启动会话的代码 session start SESSION array P
  • 经典的asp字符编码

    我在经典 asp 网站中遇到西班牙字符问题 用户可以在 aspx 页面上的表单中提交他们的姓名 地址 然后 aspx 页面将 ajax post 发送到经典的 asp 页面 它所做的所有操作都存储在我们的 Sql 2008 DB 中 我可以

随机推荐

  • 服务器ibmc无法加载js文件,WEUI应用之JS常用信息提示弹层的封装

    weUI应用 自己用JS封装了几个常用的信息提示的弹层 测试页面的代码在后面有贴出 几个弹层如下图 HTML页面代码 weUI test 测试 function 提示弹层 取消关闭 确定做相应操作 dialog 标题1111111 内容11
  • ODrive踩坑(三)AS5047P磁编码器的ABI接口

    前两篇已经介绍过ODrive在Windows下的使用环境搭建 以及TLE5012B ABI编码器闭环运动的基本配置 ODrive教程资源导航 ODrive踩坑 一 windows下使用环境的搭建 odrivetool及USB驱动的安装 OD
  • Xftp使用root权限连接服务器时提示“ssh服务器拒绝了密码”

    参考网上很多方案修改过后还是不行 最终依据这篇博客修改后成功 原因是之前修改的配置文件不对 应该修改sshd config Xftp连接linux ubuntu 时提示ssh服务器拒绝了密码 请再试一次
  • MyBatis学习笔记:Mybatis简介

    MyBatis学习笔记 Mybatis简介 参考书籍 传统的JDBC编程 流程 缺点 Example ORM模型 Mybatis 起源 ORM模型 Example 参考书籍 深入浅出MyBatis技术原理与实战 ISBN 978 7 121
  • Unity--Awake()和Start()的区别

    Unity Awake 和Start 的区别 1 对象初始化之后先调用Awake 再调用Start 然后调用Update 2 无论脚本文件是否enable Awake 都会被调用 而Start 只在enable true的时候被调用 3 游
  • HttpClient上传文件

    1 Using the AddPart Method form表单上传两个文本 一个文件 上传文件及文本 throws ClientProtocolException throws IOException author ybwei Test
  • VSCode安装Esp-IDF开发环境(pip version)出错解决办法

    安装ESP IDF4 4 4版本出现如下错误 可以看出是pip版本问题 所以只需要在安装程序使用pip命令之前 完成pip的升级即可 好像下载4点几的版本会出现此警告 导致安装失败 而下面安装5 0 1版本的时候同样出现了此警告 但是能够安
  • day22 二叉树

    235 二叉搜索树的最近公共祖先 可以按照二叉树的最近公共祖先进行操作 也可以按照搜索树的特征 无需进行回溯 从上到下进行遍历 701 二叉搜索树中的插入操作 将固定的数值插入到合适的位置 450 删除二叉搜索树中的节点 分几种情况 删除节
  • 企业实践

    欢迎关注 全栈工程师修炼指南 点击 下方卡片 即可关注我哟 设为 星标 每天带你 基础入门 到 进阶实践 再到 放弃学习 花开堪折直须折 莫待无花空折枝 文章目录 0x00 前言简述 什么是裸金属服务器 什么是IPMI 它的用途是什么 0x
  • (Java)leetcode-113 Path Sum II(路径总和 II)

    题目描述 给定一个二叉树和一个目标和 找到所有从根节点到叶子节点路径总和等于给定目标和的路径 说明 叶子节点是指没有子节点的节点 示例 给定如下二叉树 以及目标和 sum 22 5 4 8 11 13 4 7 2 5 1 返回 5 4 11
  • Pytorch 基于经典模型LeNet-5训练MNIST数据集手写数字

    LeNet 5简介 LeNet 5官网链接 卷积神经网络是一种特殊的多层神经网络 与几乎所有其他神经网络一样 它们使用反向传播算法版本进行训练 它们的不同之处在于架构 卷积神经网络旨在通过最少的预处理直接从像素图像中识别视觉模式 他们可以识
  • node + selenium-webdriver 进行Web自动化测试

    1 环境安装 nodejs安装 webdriver安装 安装各浏览器的驱动 通过各浏览器的驱动程序 操作浏览器 chrome 驱动安装 每个版本的浏览器用到的webdriver不同 可以通过chrome右上角 gt 帮助 gt 关于 Chr
  • 定义和声明的区别

    对于变量来说 定义就是声明 例如 int a 我们可是说它是定义也可以说它是声明 但是对于函数来说定义和声明完全不是一回事 void sum int a int b 这是函数的声明 void sum int a int b 整体是函数的定义
  • 纯代码的3D玫瑰花,有个这个还怕女朋友不开心?

    先上效果图 再上代码
  • 【hortonworks/registries】Parameter Schema name is null

    1 背景 修改了hortonworks registries的0 9版本的源码后 加入了json格式 然后部署后 添加schema的时候报错如下 INFO 2020 08 18 07 04 18 802 com hortonworks
  • es6之对象的扩展

    function getPoint const x 1 const y 10 return x y getPoint x 1 y 10 CommonJS 模块输出一组变量 就非常合适使用简洁写法 let ms function getIte
  • 【Metashape精品教程4】软件设置

    Metashape精品教程4 软件设置 文章目录 Metashape精品教程4 软件设置 前言 一 一般 二 GPU 三 网络 四 Appearance 五 高级 六 Agisoft Metashape1 8专业版用户手册 前言 Metas
  • C - 一只小蜜蜂...

    有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房 不能反向爬行 请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数 其中 蜂房的结构如下所示 Input 输入数据的第一行是一个整数N 表示测试实例的个数 然后是N 行数据 每行包含两个整数a和b 0
  • Java UnknownHostException –服务器的无效主机名–如何解决?

    An UnknownHostException的快速指南 如果在为远程方法调用创建到远程主机的连接时发生java net UnknownHostException 则会抛出该快速指南 UnknownHostException的预防方法 1
  • cookie 和session 的区别详解

    原文地址 http www cnblogs com shiyangxt archive 2008 10 07 1305506 html 这些都是基础知识 不过有必要做深入了解 先简单介绍一下 二者的定义 当你在浏览网站的时候 WEB 服务器