我试图在JavaScript中设置会话cookie,如下所示: document.cookie = 'name=alex; path=/' 但即使我退出浏览器并重新启动,Chrome也不会删除它。 我检查了Firefox和Opera,并且都按预期工作 – 它们在浏览器退出时删除会话cookie。 Chrome是否忽略了过期规则? 我检查了多个操作系统,发现会话cookie在Windows XP和Ubuntu的Chrome上被删除,但不在Mac OSX Lion中删除。
在RESTful API中使用会话是否违反RESTfulness? 我已经看到了许多意见,但我不相信会议是RESTless 。 从我的观点: RESTfulness不会禁止认证(否则在RESTful服务中几乎没有用处) 身份验证是通过在请求中发送身份验证令牌来完成的,通常是头部 这个认证令牌需要以某种方式获得,并且可能被撤销,在这种情况下,它需要被更新 身份验证令牌需要服务器验证(否则不会进行身份验证) 那么会话如何违反这个规定呢? 客户端,会话使用cookie来实现 cookies只是一个额外的HTTP头 会话cookie可以在任何时候被获取和撤销 会话cookie可以有一个无限的生活时间,如果需要的话 会话ID(身份验证令牌)在服务器端进行验证 因此,对于客户端,会话cookie与任何其他基于HTTP头的认证机制完全相同,除了它使用Cookie头而不是Authorization或其他专有头。 如果没有会话连接到cookie值服务器端,为什么会有所作为? 只要服务器表现为 RESTful,服务器端实现就不需要关心客户端。 因此,Cookie本身不应该使API 变得无法使用,而会话只是客户端的Cookie。 我的假设是错的吗? 什么使得会话cookie 无效 ?
我一定会错过一些关于cookies的基本知识。 在本地主机上,当我在服务器端设置一个cookie, 并明确指定域为localhost(或.localhost)。 该cookie似乎不被某些浏览器所接受。 Firefox 3.5:我在Firebug中检查了HTTP请求。 我所看到的是: Set-Cookie: name=value; domain=localhost; expires=Thu, 16-Jul-2009 21:25:05 GMT; path=/ 或者(当我将域名设置为.localhost): Set-Cookie: name=value; domain=.localhost; expires=Thu, 16-Jul-2009 21:25:05 GMT; path=/ 无论哪种情况,cookie都不会被存储。 IE8:我没有使用任何额外的工具,但似乎并没有存储的cookie,因为它不会被发回后续请求。 Opera 9.64: localhost和.localhost都可以工作 ,但是当我检查Preferences中的cookies列表时,即使列在localhost(在列表分组中),域也被设置为localhost.local。 Safari 4: localhost和.localhost都可以工作 ,但是它们总是在Preferences中被列为.localhost。 另一方面,一个没有显式域的cookie,只显示localhost(没有点)。 本地主机有什么问题? 由于这样的一些不一致之处,必须有一些涉及本地主机的特殊规则。 另外,我还不完全清楚为什么域名必须以点为前缀? RFC 2109明确规定: “域”属性的值不包含嵌入的点或不以点开头。 为什么? 该文件表明,它必须做一些安全的事情。 我不得不承认,我没有阅读整个规范(以后可能会这样做),但这听起来有点奇怪。 基于此,在本地主机上设置cookie将是不可能的。