首页 > 编程知识 正文

nodejs读写cookie(nodejs读写Word)

时间:2023-11-29 19:40:50 阅读:310525 作者:TZPI

本文目录一览:

  • 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 Worldn');

}).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 Worldn');

}).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]

console.log('Server running at ');

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 Worldnscriptconsole.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的主机名.主机名是指同一个域下的不同主机,例如:和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模块直接可以使用,而且还有很多简单粗暴的库可以即拿即用。

      首先,需要的库文件,

      1、superagent 是个轻量的的 http 方面的库,就像jquery的post,和get一样,很简单。

      2、cheerio 是一个服务端操作DOM的库,简直就是服务端的jquery。

     好的,我们需要抓取某个网站的题目。如下图。这个系统下,及时是游客状态也是可以查看题目的,只是答案我们看不到。会显示我没有登录。

现在我们有个需求,先抓取15页,根据URL的参数可以页数就是地址中 的P。并且要有本地cookie,获取cookie的方法,最简单的是,利用浏览器登录网站之后,在控制台直接打印document.cookie,得到之后,复制进txt文本。用fs模块读取并转换成字符串。在superagent请求时,把cookie传进去。

好了,控制台已经不输出“未登录”,说明已经登录成功了。

nodejs跨域怎么获取cookie

这个没有办法获取到的。

浏览器的同源策略,是不允许跨域读取cookie的。

而Nodejs是服务器端,如果浏览器都不允许。服务器自然就获取不到跨域cookie的信息了。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。