nodejs读写cookie(nodejs读写Word)

发布时间:2023-12-08

nodejs读写cookie(nodejs读写Word)

更新:2022-11-09 02:07

本文目录一览:

  1. nodejs怎么设置cookie
  2. 简单NodeJS爬虫和使用cookie进行模拟登录
  3. nodejs跨域怎么获取cookie

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.comgmail.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 模块直接可以使用,而且还有很多简单粗暴的库可以即拿即用。 首先,需要的库文件:

  1. superagent:是个轻量的 HTTP 方面的库,就像 jQuery 的 postget 一样,很简单。
  2. cheerio:是一个服务端操作 DOM 的库,简直就是服务端的 jQuery。 好的,我们需要抓取某个网站的题目。如下图。这个系统下,即使是游客状态也是可以查看题目的,只是答案我们看不到。会显示我没有登录。 现在我们有个需求,先抓取 15 页,根据 URL 的参数可以知道页数就是地址中的 p。并且要有本地 cookie,获取 cookie 的方法,最简单的是,利用浏览器登录网站之后,在控制台直接打印 document.cookie,得到之后,复制进 txt 文本。用 fs 模块读取并转换成字符串。在 superagent 请求时,把 cookie 传进去。 好了,控制台已经不输出“未登录”,说明已经登录成功了。

nodejs跨域怎么获取cookie

这个没有办法获取到的。 浏览器的同源策略,是不允许跨域读取 cookie 的。 而 Nodejs 是服务器端,如果浏览器都不允许,服务器自然就获取不到跨域 cookie 的信息了。