expressjs从子域中删除Cookie

我通过子域提供我应用上的所有静态内容。

不过,我的快车应用程序仍然在静态内容上设置会话cookie。 我尝试按照文档设置path:

app.use(express.session({ secret: 'your app secret', cookie: { domain : '.yourdomain.com' }, store: new MongoStore({ db: 'db', host: 'localhost', port:config.dbPort }) })); 

但它仍然不适合我。 我也尝试使用“path”:

 cookie: { path : '.yourdomain.com' } 

但即使这样也不能阻止在静态内容上设置Cookie。

有关如何从所有静态内容中删除cookie的任何想法?

更新:

 Request Headers Accept:text/css,*/*;q=0.1 Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en;q=0.8 Connection:keep-alive Host:cdn.yourdomain.com Referer:http://localhost:8888/ User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5 Response Headers Cache-Control:public, max-age=86400 Connection:keep-alive Content-Encoding:gzip Content-Type:text/css; charset=UTF-8 Date:Mon, 28 May 2012 09:02:09 GMT Last-Modified:Tue, 01 May 2012 03:57:45 GMT Server:nginx Set-Cookie:connect.sid=d9nEPGiAeSwGFUN2Ra8CGBmq.tPdTQdk7O2UUvO2q%2BEOG2%2Fgh%2FNEdIxtUZYdUN%2FtDmas; domain=www.yourdomain.com; path=/; expires=Mon, 28 May 2012 13:02:08 GMT; httpOnly Transfer-Encoding:chunked X-Cache:MISS X-Edge-Id:353260802 

连接会话中间件以这种方式工作。 无论当前的主机是什么都设置Cookie。 从性能的angular度来看,这是很好的,但是固有地引起这样的问题。

我看到这个问题的两个解决scheme:

  • 使用Connect的Vhost中间件。 海事组织,这是最直接的解决scheme。 只需为cdn.yourdomain.com创build一个单独的应用程序,而不包括会话中间件。

  • 在会话中间件周围创build一个包装,以便仅包含具有正确主机的请求。 这是一个非常奇怪的解决scheme,可以打扰像CSRF的其他中间件。

无论如何,我会说使用Node.js服务静态资产可能看起来像一个奇怪的想法。 为此,像Nginx这样的networking服务器在性能和轻便方面是无与伦比的。 理想情况下,请求静态请求不应达到Node.js.

仅供参考,第二种解决scheme的代码可能如下所示(未经testing):

 function hostAwareSessionMiddleware(options) { var originalMiddleware = express.session(options); if(!options.cookie || !options.cookie.domain) return originalMiddleware; var domain = options.cookie.domain; if(domain[0] === '.') domain = '(.+)\.' + domain.slice(1); var regex = new RegExp('^' + domain.replace('.', '\\.') + '$', 'i'); return function(req, res, next) { if(!req.headers.host) return next(); if(req.headers.host.match(regex)) { return originalMiddleware(req, res, next); } next(); } } app.use(hostAwareSessionMiddleware({ secret: 'your app secret', cookie: { domain : 'yourdomain.com' }, store: new MongoStore({ db: 'db', host: 'localhost', port:config.dbPort } }));