nodejs读写cookie(nodejs读写Word)
更新:2022-11-09 02:07
本文目录一览:
nodejs怎么设置cookie
var http = require('http');
http.createServer(function (req, res) {
// 获得客户端的Cookie
var Cookies = {};
req.headers.cookie && req.headers.cookie.split(';').forEach(function( Cookie ) {
var parts = Cookie.split('=');
Cookies[ parts[ 0 ].trim() ] = ( parts[ 1 ] || '' ).trim();
});
console.log(Cookies);
// 向客户端设置一个Cookie
res.writeHead(200, {
'Set-Cookie': 'myCookie=test',
'Content-Type': 'text/plain'
});
res.end('Hello World\n');
}).listen(8000);
console.log('Server running at ');
如果去掉其中几句,就是官方给出的例子,除了表明返回一个页面多简单外,一点用也没有。
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(8000);
console.log('Server running at ');
我们通过 http.createServer
的回调来处理所有请求与响应,因此什么有用的东西都在它们上面。Cookie位于 req
对象的 headers
对象上,为一个字符串,通常为了方便我们将它们转换成一个对象。
写入一个 Cookie 其实就是在首部设置一个键值对,上面是简单方式,它实际上可以这样:
res.writeHead(200, {
'Set-Cookie': ["aaa=bbb","ccc=ddd","eee=fff"],
'Content-Type': 'text/plain'
});
但真正使用时,我们的 Cookie 并非这样简单的格式:
Set-Cookie: =[; =]
[; expires=][; domain=]
[; path=][; secure][; HttpOnly]
HttpOnly 属性
这是微软对 Cookie 做的扩展。如果在 Cookie 中设置了 "HttpOnly" 属性,那么通过程序(JS 脚本、Applet 等)将无法读取到 Cookie 信息,这样能有效的防止 XSS 攻击。
var http = require('http');
http.createServer(function (req, res) {
// 获得客户端的Cookie
var Cookies = {};
req.headers.cookie && req.headers.cookie.split(';').forEach(function( Cookie ) {
var parts = Cookie.split('=');
Cookies[ parts[ 0 ].trim() ] = ( parts[ 1 ] || '' ).trim();
});
console.log(Cookies);
// 向客户端设置一个Cookie
res.writeHead(200, {
'Set-Cookie': 'SSID=Ap4GTEq; Expires=Wed, 13-Jan-2021 22:23:01 GMT; HttpOnly',
'Content-Type': 'text/html'
});
res.end('Hello World\n<script>console.log(document.cookie)</script>');
}).listen(8000);
console.log('Server running at ');
然后多刷几次页面,我们发现我们还能在控制台看到 SSID=Ap4GTEq
这个属性,但在前端我们看不到它(当然在 Firebug 中能看到)。
Secure 属性
当设置为 true
时,表示创建的 Cookie 会被以安全的形式向服务器传输,也就是只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该信息,所以不会被窃取到 Cookie 的具体内容。同上,在客户端我们也无法在 document.cookie
找到被设置了 Secure=true
的 Cookie 键值对。Secure
属性是防止信息在传递的过程中被监听捕获后信息泄漏,HttpOnly
属性的目的是防止程序获取 Cookie 后进行攻击。我们可以把 Secure=true
看成比 HttpOnly
更严格的访问控制。
path 属性
指定可访问 Cookie 的目录。例如:"userId=320; path=/shop"
就表示当前 Cookie 仅能在 /shop
目录下使用。
domain 属性
指定可访问 Cookie 的主机名。主机名是指同一个域下的不同主机,例如:www.google.com
和 gmail.google.com
就是两个不同的主机名。默认情况下,一个主机中创建的 Cookie 在另一个主机下是不能被访问的,但可以通过 domain
参数来实现对其的控制,其语法格式为:"name=value; domain=CookieDomain"
。以 google 为例,要实现跨主机访问,可以写为:"name=value; domain=.google.com"
,这样,所有 google.com
下的主机都可以访问该 Cookie。
Expires 属性
指定过期时间,格式为 "name=value; expires=GMT_String"
,其中 GMT_String
是以 GMT 格式表示的时间字符串,超过这个时间,Cookie 将消失,不可访问。例如:如果要将 Cookie 设置为 10 天后过期,可以这样实现:
简单NodeJS爬虫和使用cookie进行模拟登录
NodeJS 做爬虫也是很方便的。因为 nodejs 有 HTTP 模块直接可以使用,而且还有很多简单粗暴的库可以即拿即用。 首先,需要的库文件:
- superagent:是个轻量的 HTTP 方面的库,就像 jQuery 的
post
和get
一样,很简单。 - cheerio:是一个服务端操作 DOM 的库,简直就是服务端的 jQuery。
好的,我们需要抓取某个网站的题目。如下图。这个系统下,即使是游客状态也是可以查看题目的,只是答案我们看不到。会显示我没有登录。
现在我们有个需求,先抓取 15 页,根据 URL 的参数可以知道页数就是地址中的
p
。并且要有本地 cookie,获取 cookie 的方法,最简单的是,利用浏览器登录网站之后,在控制台直接打印document.cookie
,得到之后,复制进 txt 文本。用fs
模块读取并转换成字符串。在superagent
请求时,把 cookie 传进去。 好了,控制台已经不输出“未登录”,说明已经登录成功了。
nodejs跨域怎么获取cookie
这个没有办法获取到的。 浏览器的同源策略,是不允许跨域读取 cookie 的。 而 Nodejs 是服务器端,如果浏览器都不允许,服务器自然就获取不到跨域 cookie 的信息了。