javascrip cookie

2024-06-06 08:08
文章标签 java cookie scrip

本文主要是介绍javascrip cookie,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先要明确一下cookie的概念,因为HTTP协议是一种无状态协议,也就是说一旦服务器和客户端的数据交换完毕后,他们之间的连接就会被断开,再次交换数据的时候就需要再次建立连接,这就意味着服务器无法从连接上判断客户端。
为了解决这个问题,W3C引入了cookie机制。cookie就好比一个身份证,客户端请求服务器的时候,服务器将这个身份证颁发给客户端,客户端(浏览器)将这个身份证保存在本地,当下次连接服务器时,客户端携带这个身份证请求服务器,服务器根据身份证即可确定用户身份。
cookie不仅客户端能访问到,因为客户端请求服务器的时候会将cookie放在请求头里带到服务器,所以服务器也能对cookie进行操作,这里讨论使用javascript在客户端对cookie进行操作的方法。

一、写入cookie

写入cookie主要设置五个字段,内容、有效期、域名、路径、是否安全传输。

内容

cookie是以键值对形式保存的,要新建一个名为name,值为zhangsan的cookie就是“name=zhangsan”,只需将这个cookie赋值给document.cookie即可:

document.cookie = "name=zhangsan";  //添加cookie

document.cookie有读和写两种形式,上面这个形式便是写形式,写形式代表添加cookie,且一次只能添加一条cookie,要添加多条则需要调用多次。如

document.cookie = "name=zhangsan;age=10"; //无效,只添加了name,忽略age
document.cookie = "age=10";  //添加age

有效期

默认情况下,cookie在关闭浏览器的时候就会被清除,想让cookie存放更长时间可以通过设置expires字段实现。
expires字段需要的值是GMT(格林威治时间)格式的日期型字符串,可以用Date对象得到:

    var date = new Date();//将时间设置成30分钟以后date.setTime(date.getTime() + 30 * 60 * 1000);//name=zhangsan将在30分钟后过期document.cookie = "name=zhangsan;expires="+date.toGMTString();

想调整过期时间,只需要改动setTime一行的代码。

域名

处于安全性的考虑,cookie是具有不可跨域性的,用户访问百度的时候,百度为客户端颁发了一个cookie,用户再去访问谷歌,谷歌给客户端颁发一个cookie,那么百度和谷歌是不能访问到彼此的cookie的。
但是一般来说,我们访问baidu.com的时候会发现,你是可以访问到map.baidu.com的cookie的,这是因为给cookie设置了domian属性,因为map.baidu.com和baidu.com具有同样的域名baidu.com,所以可以为cookie设置domian值为baidu.com

document.cookie = "name=zhangsan;domain=baidu.com";

路径

同样道理,blog.csdn.net是访问不到blog.csdn.net/sunhengzhe里面的cookie的(但反过来可以),为了使上级目录访问到下级目录,在blog.csdn.net/sunhengzhe里新建cookie时,可以为cookie设置path属性,一般可以直接将其设置为根目录

document.cookie = "name=zhangsan;path=/";

安全传输

cookie是保存在客户端本地的,所以查看cookie是很方便,这也暴露了cookie的不安全性,所以一般cookie不存放如密码等重要信息,secure属性并不是用来设置cookie内容的安全性的,而是用于传输过程中的安全,设置secure后,只保证 cookie 与服务器之间的数据传输过程加密,而保存在本地的 cookie文件并不加密。所以如果是想让本地保存的cookie也加密的话,最好在保存cookie值的时候就保存加密后的数据。

document.cookie = "name=zhangsan;secure";

二、读取cookie

读取cookie使用到document.cookie的读模式,返回的就是所有的cookie,中间用分号隔开。

document.cookie = "name=zhangsan";  //写
document.cookie = "age=10";  //写
console.log(document.cookie);  //输出 name=zhangsan; age=10

三、删除、修改cookie

cookie并不提供删除、修改的方法,如果想修改某项cookie,只需添加一个同名cookie,新的值将覆盖旧的值。

document.cookie = "name=zhangsan";
document.cookie = "name=lisi";  //name被修改为lisi

要删除cookie,只需将该cookie有效期设置到当前时间以前即可。

var date = new Date();
//设置为前一毫秒(多前都可以)
date.setTime(date.getTime() - 1);
//删除name
document.cookie = "name=lisi;expires=" + date.toGMTString();

四、封装操作cookie的方法

使用原生方法对cookie操作是有些麻烦的,我们可以将其封装起来,name代表键名,value代表值,不填则为读取名为name的值,option代表设置值如有效期等。其中有效期单位为天。

    function cookie(name, value, options) {if (typeof value != 'undefined') {options = options || {};//如果值为null, 删除cookieif (value === null) {value = '';options = {expires: -1};}//设置有效期var expires = '';if (options.expires && (typeof options.expires == 'number' || options.expires.toGMTString)) {var date;if (typeof options.expires == 'number') {date = new Date();date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));} else {date = options.expires;}expires = ';expires=' + date.toGMTString();}var path = options.path ? ';path=' + (options.path) : '';var domain = options.domain ? ';domain=' + (options.domain) : '';var secure = options.secure ? ';secure' : '';//设置cookiedocument.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');} else {//读取cookieif (document.cookie.length > 0) {var start = document.cookie.indexOf(name + "=")if (start != -1) {start = start + name.length + 1;var end = document.cookie.indexOf(";", start);if (end == -1){end = document.cookie.length;}return decodeURIComponent(document.cookie.substring(start, end));}}return ""}}cookie("name", "zhangsan"); //添加name=zhangsancookie("name", null); // 删除namecookie("age", "10", {expires: 30}); // 添加age=10且有效期30天

这篇关于javascrip cookie的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1035543

相关文章

Spring Boot中WebSocket常用使用方法详解

《SpringBoot中WebSocket常用使用方法详解》本文从WebSocket的基础概念出发,详细介绍了SpringBoot集成WebSocket的步骤,并重点讲解了常用的使用方法,包括简单消... 目录一、WebSocket基础概念1.1 什么是WebSocket1.2 WebSocket与HTTP

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

java中反射Reflection的4个作用详解

《java中反射Reflection的4个作用详解》反射Reflection是Java等编程语言中的一个重要特性,它允许程序在运行时进行自我检查和对内部成员(如字段、方法、类等)的操作,本文将详细介绍... 目录作用1、在运行时判断任意一个对象所属的类作用2、在运行时构造任意一个类的对象作用3、在运行时判断

java如何解压zip压缩包

《java如何解压zip压缩包》:本文主要介绍java如何解压zip压缩包问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解压zip压缩包实例代码结果如下总结java解压zip压缩包坐在旁边的小伙伴问我怎么用 java 将服务器上的压缩文件解压出来,

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

Spring WebFlux 与 WebClient 使用指南及最佳实践

《SpringWebFlux与WebClient使用指南及最佳实践》WebClient是SpringWebFlux模块提供的非阻塞、响应式HTTP客户端,基于ProjectReactor实现,... 目录Spring WebFlux 与 WebClient 使用指南1. WebClient 概述2. 核心依

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2