[前端] nodejs之cookie入门

来源:互联网 发布:未来计价软件下载 编辑:程序博客网 时间:2024/05/16 18:04

一、语法

Set-Cookie:    cookieName=cookieValue;    [expires=]    [;domain=]    [;path=]    [;secure=]    [;httpOnly=]

参数说明:
1、expires:指定过期时间,以GMT格式表示的时间字符串,如方法一个的“timeObj”。 

2、maxAge:指定过期时间,同expires(expires和maxAge选两者其一设值即可)。和expires不同之处在于,maxAge值的单位为毫秒(见方法二中的maxAge:10*1000,即为10秒)。maxAge值可以是正数和负数。正数表示当前COOKIE存活的时间。负数表示当前COOKIE只是随着浏览器存储在客户端的内存里,只要关闭浏览器,此COOKIE就马上消失。默认值为-1。 

3、domain:指定可访问COOKIE的主机名。主机名是指同一个域名下的不同主机。如:www.google.com和gmail.google.com是在两个不同的主机上,即两个不同的主机名。默认情况下,一个主机中创建的COOKIE在另一个主机下是不能被访问,但可以通过domain参数来实现对其的控制,即所谓的跨子域。以google为例,要实现跨主机(跨子域)访问,写法如下:domain=.google.com,这样就实现了所有google.com下的主机都可以访问此COOKIE。(本机环境上设置此值时,COOKIE无法查看。)  
  
4、path:指定可访问此COOKIE的目录。如:path=/default  表示当前COOKIE仅能在 default 目录下使用。默认值为“/”,即根目录下的所有目录皆可以访问。

5、secure:当设为true时,表示创建的COOKIE会以安全的形式向服务器传输,即只能在HTTPS连接中被浏览器传递到服务器端进行会话验证;若是HTTP连接则不会传递该信息,所以不会被窃取到COOKIE里的具体内容。同理,在客户端,我们也无法使用document.cookie找到被设置了secure=true的cookie健值对。secure属性是防止信息在传递的过程中被监听捕获后信息泄漏,httpOnly属性的目的是防止程序获取COOKIE后进行攻击(XSS)。我们可以把secure=true看成比httpOnly=true是更严格的访问控制。
 
6、httpOnly:是微软对COOKIE做的扩展。如果在COOKIE中设置了“httpOnly”属性,则通过程序(JS脚本、applet等)将无法读取到COOKIE信息,防止XSS攻击产生。
 

二、设置单个cookie

var http = require('http');http.createServer(function (req, res) {    // 获得客户端的Cookie    var Cookies = {};    req.headers.cookie && req.headers.cookie.split(';').forEach(function( Cookie ) {  // forEach编辑数组        var parts = Cookie.split('=');  // =为分隔符,把字符串分隔成数组        Cookies[ parts[ 0 ].trim() ] = ( parts[ 1 ] || '' ).trim(); // 把数组内容以json的形式存储    });    console.log(Cookies)  // 打印cookie    // 向客户端设置一个Cookie    res.writeHead(200, {        'Set-Cookie': 'myCookie=test',  // cookie=cookie        'Content-Type': 'text/plain'    });    res.end('Hello World\n');}).listen(8000);console.log('Server running at http://127.0.0.1:8000/');

访问:http://localhost:8000/    然后F12打开开发者工具(以chrome浏览器为例)



当然在控制页面中也可以看到



三、设置多个cookie

res.writeHead(200, {    'Set-Cookie': ["aaa=bbb","ccc=ddd","eee=fff"],  // 以数组的形式设置    'Content-Type': 'text/plain'});


浏览器返回结果:



控制面板返回结果:



四、在cookie中添加有效期和httpOnly设置 

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': 'name=zhangsan; Expires=Wed, 13-Jan-2021 22:23:01 GMT; HttpOnly ',            'Content-Type': 'text/html'        });        res.end('Hello World\n'); }).listen(8000); console.log('Server running at http://127.0.0.1:8000/');

浏览器返回结果:



HttpOnly 属性 : 这是微软对Cookie做的扩展。如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。)


五、删除cookie

把值设为空字符串,把有效期值0

res.writeHead(200, {    'Set-Cookie': 'name=""; Expires=0',    'Content-Type': 'text/html'});


相关优秀博文:

http://www.tuicool.com/articles/ya2eimE

http://www.tuicool.com/articles/F3UF7n


谢谢关注!





0 0