nodejs操作cookie
2018-06-27 本文已影响0人
Veb
cookie
可以记录用户操作状态,在服务器端也可以操作cookie
,这也是session
会话控制的依据点。
1.获取cookie
通过req.headers.cookie
拿到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)
res.end('Hello World\n');
}).listen(8000);
2.设置cookie
基础设置:
res.writeHead(200, {
'Set-Cookie': 'myCookie=test',
'Content-Type': 'text/plain'
});
多组设置:
res.writeHead(200, {
'Set-Cookie': ["aaa=bbb","ccc=ddd","eee=fff"],
'Content-Type': 'text/plain'
});
但真正使用时,我们的Cookie并非这样简单的的格式,需要设置过期时间等等:
res.writeHead(200, {
'Set-Cookie': 'myCookie=test; Expires=Wed, 13-Jan-2021 22:23:01 GMT;HttpOnly ',
'Content-Type': 'text/html'
});
HttpOnly
属性: 这是微软对Cookie
做的扩展。如果在Cookie中设置了"HttpOnly"
属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie
信息,这样能有效的防止XSS攻击。
-
Expires
属性:指定过期时间,格式为"name=value;; expires=GMT_String";其中GMT_String
是以GMT
格式表示的时间字符串,超过这个时间,Cookie
将消失,不可访问。 -
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
目录下使用。