HTTP是无状态协议。例:打开一个域名的首页,进而打开该域名的其他页面,服务器无法识别访问者。即同一浏览器访问同一网站,每次访问都没有任何关系。
Cookie的原理是:客户端浏览器在第一次访问服务器后,服务器返回一段json数据进行标识,此后当客户端浏览器再次访问同一个域时,每次都携带此cookie信息。
Cookie具有不可跨域名性。根据Cookie规范,浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie。
cookie在Node.js中使用:
const cookieParser = require('cookie-parser'); //模块 cookie-parser
const app = express();
app.use(cookieParser()); //中间件
app.get('/',(req,res)=>{
res.send('根路由');
})
app.get('/login',(req,res)=>{
//获取客户端cookies
console.log(req.cookies);
//服务器下发cookie
res.cookie('heaven','666',{
maxAge:900000 //有效时间,毫秒
});
res.send('ok');
})
app.listen(3000);
服务器需要记录用户的状态,依赖cookie跟踪session,第一次创建session时,服务端会在HTTP协议中告诉客户端,需要在cookie里面记录一个session ID,以后客户端每次请求携带此session ID,服务器就能识别客户端。
/*
session 数据存放在服务端,但索引存放在浏览器,浏览器是根据cookieid识别对应的session
npm i express-session -S 使用session模块
*/
const express = require('express');
const session = require('express-session'); // 解析session的模块 express-session
const app = express();
//启动session的中间件,公式
app.use(session({ //要求客户端设置一个加密的cookie
secret:'heaven', //任意字符都行,给cookie加密
cookie:{maxAge:300000},
resave:true,
saveUninitialized:true,
}))
//中间件是按先后顺序执行的,所以放在前面拦截
app.get('/favicon.ico',(req,res)=>{
return;
})
app.get('/',(req,res)=>{
res.send('你的足迹是'+req.session.lvyou);
})
app.get('/:city',(req,res)=>{
let city = req.params.city;
// console.log(req.session);
let cityArr = req.session.lvyou || [];
cityArr.push(city);
req.session.lvyou = cityArr;
res.send("你今天去了"+city);
})
app.listen(3000);
BFC已经是一个耳听熟闻的词语了,网上有许多关于 BFC 的文章,介绍了如何触发 BFC 以及 BFC 的一些用处(如清浮动,防止 margin 重叠等)。BFC直译为\"块级格式化上下文\"。它是一个独立的渲染区域,只有Block-level box参与
作为前端,我们每天都在与CSS打交道,那么CSS的原理是什么呢?开篇,我们还是不厌其烦的回顾一下浏览器的渲染过程,学会使用永远都是最基本的标准,但是懂得原理,你才能触类旁通,超越自我。
做了一些研究,我发现了函数式编程概念,如不变性和纯函数。 这些概念使你能够构建无副作用的功能,而函数式编程的一些优点,也使得系统变得更加容易维护。我将通过 JavaScript 中的大量代码示例向您详细介绍函数式编程和一些重要概念。
如果你阅读过关于Angular 2变化检测的资料,那么你很可能听说过zone。Zone是一个从Dart中引入的特性并被Angular 2内部用来判断是否应该触发变化检测
updateComponent在更新渲染组件时,会访问1或多个数据模版插值,当访问数据时,将通过getter拦截器把componentUpdateWatcher作为订阅者添加到多个依赖中,每当其中一个数据有更新,将执行setter函数
一个继承自 Foo.prototype 的新对象被创建;使用指定的参数调用构造函数 Foo,并将 this 绑定到新创建的对象。new Foo 等同于 new Foo(),也就是没有指定参数时,Foo 不带任何参数调用的情况
Http 缓存机制作为 web 性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系库中的一个基础环节,同时对于有志成为前端架构师的同学来说是必备的知识技能。
HTTPS = HTTP + TLS/SSL,简单理解 HTTPS 其实就是在 HTTP 上面加多了一层安全层。HTTP 可以是 Http2.0 也可以是 Http1.1,不过现在 Http2.0 是强制要求使用 Https 的。使用非对称密钥(即公钥私钥))和对称密钥)(即共享密钥)相结合
Promise 必须为以下三种状态之一:等待态(Pending)、执行态(Fulfilled)和拒绝态(Rejected)。一旦Promise 被 resolve 或 reject,不能再迁移至其他任何状态(即状态 immutable)。
当时的我将我们的小程序定位成一个SPA单页应用 ,因为我们的小程序的宿主环境是浏览器。它只是看起来像小程序(因为这个窗口没有地址栏什么的),但其实包括UI渲染和事件交互在内的绝大部分功能都是基于Web技术
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!