面试必问的Cookies,你知道多少 【1】

简介: 面试必问的Cookies,你知道多少 【1】

前言

在前端面试中,cookies是经常被提及的内容,基本每家公司都会有涉及。如果你经常访问国外的一些网站的话,会遇到弹出获取cookies的对话框。由此可见cookies在 实际应用中是无比重要的!!!

Cookies

Cookies是服务器发送给用户浏览器的一块保存在本地的数据。当用户下一次访问服务器的时候,会被发送到服务器。客户端Cookies的存储大小为4k。

作用

  1. 用来进行会话状态管理,例如记录用户的登录状态
  2. 用来记录跟踪用户的行为

常用属性

Expires/Max-Age

主要是用来设定Cookies的有效期。

Expires用于执行具体的过期事件。

例如在Node做为服务端,我们可以使用:

res.setHeader('Set-Cookie', [
  `name=keliq; expires=${new Date(Date.now() + 36000 ).toGMTString()}`,
])

Max-Age 以秒为单位设置多少秒之后过期:

res.setHeader('Set-Cookie', ['name=picker; max-age=10;'])

如果同时设置Expires和Max-Age,则Max-Age生效。

Secure

当Secure 设置为true时,只要服务器使用SSL和HTTPS 时,客户端才能收到Cookies

res.setHeader('Set-Cookie', ['Secure-true;'])

HttpOnly

当HttpOnly设置为true时,客服端无法使用JavaScript来获取Cookies。

res.setHeader('Set-Cookie', ['httpOnly=true;',])

JavaScript设置cookie

设定/修改

document.cookie=“name=123”;

注意:

document.cookie="name=syl; age=18"

这样的话只有name生效,即每次只能设置一个。因此需要封装或者多次调用。

封装

设置

//设置cookies
function setCookie(name,value,MyDay){
    var ExDate = new Date();
    ExDate.setDate(ExDate.getDate() + MyDay);//如果需要时间的话以这样获取。
    document.cookie = name + "=" + value + ";expires=" + ExDate;
}

获取

//获取cookies
function getCookie(name){
    //例如cookie是"username=abc; password=123"
    var arr = document.cookie.split('; ');//用“;”和空格来划分cookie
    for(var i = 0 ;i < arr.length ; i++){
        var arr2 = arr[i].split("=");
        if(arr2[0] == name){
            return arr2[1];
        }
    }
    return "";//整个遍历完没找到,就返回空值
}

删除

//删除cookies
function removeCookie(name){
    setCookie(name, "1", -1)//第二个value值随便设个值,第三个值设为-1表示:已经过期。
}

缺点

以下缺点,来自百科

  1. Cookie在某种程度上说已经严重危及用户的隐私安全。其中的一种方法是:一些公司的高层人员为了某种目的(譬如市场调研)而访问了从未去过的网站(通过搜索引擎查到的),而这些网站包含了一种叫做网页臭虫的图片,该图片透明,且只有一个像素大小(以便隐藏),它们的作用是将所有访问过此页面的计算机写入Cookie。而后,电子商务网站将读取这些Cookie信息,并寻找写入这些Cookie的网站,随即发送包含了针对这个网站的相关产品广告的垃圾邮件给这些高级人员。
  2. 虽然Cookie没有中电脑病毒那么危险,但它仍包含了一些敏感消息:用户名、电脑名、使用的浏览器和曾经访问的网站。用户不希望这些内容泄漏出去,尤其是当其中还包含有私人信息的时候。这并非危言耸听,跨站点脚本Cross site scripting)可以达到此目的。在受到跨站点脚本攻击时,Cookie盗贼和Cookie投毒将窃取内容。一旦Cookie落入攻击者手中,它将会重现其价值。
  • Cookie盗贼:搜集用户Cookie并发给攻击者的黑客,攻击者将利用Cookie消息通过合法手段进入用户帐户。
  • Cookie投毒:一般认为,Cookie在储存和传回服务器期间没有被修改过,而攻击者会在Cookie送回服务器之前对其进行修改,达到自己的目的。例如,在一个购物网站的Cookie中包含了顾客应付的款项,攻击者将该值改小,达到少付款的目的。


相关文章
|
安全 测试技术
软件测试面试题:cookies机制和session机制的区别
软件测试面试题:cookies机制和session机制的区别
95 0
|
Web App开发 前端开发 安全
面试官:Cookies 的属性有哪些?
大家好,我是前端西瓜哥。今天来学习一下 Cookie 的属性有哪些?以及有什么作用?
369 0
面试官:Cookies 的属性有哪些?
|
3月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
12天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
14天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
39 4
|
1月前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
72 2
|
1月前
|
JSON 安全 前端开发
第二次面试总结 - 宏汉科技 - Java后端开发
本文是作者对宏汉科技Java后端开发岗位的第二次面试总结,面试结果不理想,主要原因是Java基础知识掌握不牢固,文章详细列出了面试中被问到的技术问题及答案,包括字符串相关函数、抽象类与接口的区别、Java创建线程池的方式、回调函数、函数式接口、反射以及Java中的集合等。
29 0
|
3月前
|
存储 安全 Java
这些年背过的面试题——Java基础及面试题篇
本文是技术人面试系列Java基础及面试题篇,面试中关于Java基础及面试题都需要了解哪些内容?一文带你详细了解,欢迎收藏!
|
3月前
|
XML 存储 JSON
【IO面试题 六】、 除了Java自带的序列化之外,你还了解哪些序列化工具?
除了Java自带的序列化,常见的序列化工具还包括JSON(如jackson、gson、fastjson)、Protobuf、Thrift和Avro,各具特点,适用于不同的应用场景和性能需求。
|
3月前
|
Java
【Java基础面试三十七】、说一说Java的异常机制
这篇文章介绍了Java异常机制的三个主要方面:异常处理(使用try、catch、finally语句)、抛出异常(使用throw和throws关键字)、以及异常跟踪栈(异常传播和程序终止时的栈信息输出)。
下一篇
无影云桌面