Nginx设置Cookie过期

起因
目前网站上以前的cookie过多,因为不同浏览器允许的cookie数量不一样,可能导致一些功能出问题。而且cookie过多也对网页打开速度有重大影响,因此清理不再需要的Cookie就是必须的了。早期的浏览器在同一域名下只能保存20个cookie,IE 7也只能保存20个,而IE8和Firefox最大值是50个,Chrome,Safari则是不限制,因此Cookie过多,会导致部分浏览器的用户出现cookie被挤出而存在功能缺失。目前网站的cookie已经达到25个及以上,因此需要删除部分不再使用的cookie。

如何删除?
如何快速删除现有保存在用户浏览器的无效Cookie?通过HTTP响应的响应头里面添加Set-Cookie就可以完成这项工作。如果需要快速删除所有浏览器的话,则需要在每一个页面都会访问的请求中添加上删除Cookie的HTTP响应头。目前选定的HTTP请求是Toolbar上请求购物车商品数的json请求,这个json请求在每一个页面都会发起,因此只要用户访问网站就可以将不需要的Cookie清除。为了尽管避免在代码层的修改,我们选择在Nginx里面来处理这个操作。

Nginx配置Set-Cookie
Nginx中可以通过add_header指令在HTTP响应头中添加响应头内容,因此也可以用来添加我们需要删除Cookie的响应头。Nginx还提供ngx_http_userid_module模块来处理Cookie相关事宜,对于这个简单的需求,我们直接用add_header指令来搞定。具体的Nginx指令如下:

location ~ ^/(buy|cart).*\.(html|json)$ {
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        add_header Set-Cookie "hqb_exist=0; domain=.okhqb.com; path=/; expires=31 Dec 2011 23:55:55 GMT";
        add_header Set-Cookie "_hqb_a=0; domain=.okhqb.com; path=/; expires=31 Dec 2011 23:55:55 GMT";
        add_header Set-Cookie "hqb_pv=0; domain=.okhqb.com; path=/; expires=31 Dec 2011 23:55:55 GMT";
        add_header Set-Cookie "hqb_origin=0; domain=.okhqb.com; path=/; expires=31 Dec 2011 23:55:55 GMT";
        add_header Set-Cookie "ifupdataprov=0; domain=.okhqb.com; path=/; expires=31 Dec 2011 23:55:55 GMT";
        proxy_pass :8080;
}

上面的指令即是用来设置删除Cookie的,我们把过期时间设置在用户访问页面的时间之前,这样Cookie就会被浏览器删除了。

add_header Set-Cookie "hqb_pv=0; domain=.okhqb.com; path=/; expires=31 Dec 2011 23:55:55 GMT";

注意事项:

cookie值里面的分号后必须包含空格
expires的过期模式必须是上述格式,否则会报时间无效。 这个日期格式难倒不少人,Google了许久都没找到个靠谱的说法,最近还是实践出真知。

推荐阅读

CentOS 6.2实战部署Nginx+MySQL+PHP

使用Nginx搭建WEB服务器

搭建基于Linux6.3+Nginx1.2+PHP5+MySQL5.5的Web服务器全过程

CentOS 6.3下Nginx性能调优

CentOS 6.3下配置Nginx加载ngx_pagespeed模块

CentOS 6.4安装配置Nginx+Pcre+php-fpm

Nginx 的详细介绍请点这里
Nginx 的下载地址请点这里

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/1418d9234bee39016a0d2534482287fa.html