在服务器上和在客户机上创建 Cookie 有什么区别?这些是否称为服务器端 Cookie 和客户端 Cookie?是否有办法创建只能在服务器或客户端上读取的 Cookie?
你可能指的是 Http Only cookies和它们的对应部分之间的差异?
在客户端 JavaScript 中,只有服务器端才能访问(读取或写入) Http Only Cookie。如果没有设置 Http Only 标志,或者 Cookie 是在(客户端) JavaScript 中创建的,那么 Cookie 可以在(客户端) JavaScript 和服务器端中读取和写入。
所有 Cookie 都是客户端 还有服务器
没有区别。可以在服务器端或客户端设置常规 cookie。“经典”cookie 将随每个请求发送回来。由服务器设置的 Cookie 将在响应中发送到客户端。服务器仅在显式设置或更改 Cookie 时发送 Cookie,而客户端在每个请求上发送 Cookie。
但本质上是同一块饼干。
但是,行为是可以改变的
Cookie 基本上是 name=value对,但是 在价值之后可以是一组分号分隔的 属性,它们影响 Cookie 如果的行为,因此由客户机(或服务器)实现。 这些属性可以是关于生存期、上下文和各种安全设置的。
name=value
仅 HTTP (不仅仅是服务器)
服务器可以设置其中一个属性来指示它是一个仅 HTTP 的 cookie。这意味着 cookie 仍然会来回发送,但是在 JavaScript 中不可用。但是请注意,饼干仍然在那里!它只是一个内置的保护在浏览器,但如果有人会使用一个可笑的老浏览器,如 IE5,或一些自定义客户端,他们实际上可以读取 cookie!
所以看起来好像有“服务器 cookie”,但实际上并没有。那些饼干还是会发送给客户。在客户端上,没有办法阻止 Cookie 被发送到服务器。
实现“唯一性”的替代方案
如果只想在服务器上存储值,或者只想在客户机上存储值,那么就需要其他类型的存储,比如服务器上的文件或数据库,或者客户机上的本地存储。
Cookie 是网站用来在浏览器上存储状态信息的键/值对。 假设你有一个网站(example.com) ,当浏览器请求一个网页时,网站可以发送 cookie 来在浏览器上存储信息。
浏览器请求示例:
GET /index.html HTTP/1.1 Host: www.example.com
来自服务器的示例答案:
HTTP/1.1 200 OK Content-type: text/html Set-Cookie: foo=10 Set-Cookie: bar=20; Expires=Fri, 30 Sep 2011 11:48:00 GMT ... rest of the response
这里有两个 cookies foo = 10和 bar = 20存储在浏览器中,第二个将于9月30日到期。 在随后的每个请求中,浏览器都会将 Cookie 发送回服务器。
GET /spec.html HTTP/1.1 Host: www.example.com Cookie: foo=10; bar=20 Accept: */*
服务器端 Cookie 称为“会话”。在这种情况下,网站在包含唯一会话标识符的浏览器上存储单个 cookie。状态信息(foo = 10和 bar = 20)存储在服务器上,会话标识符用于将请求与存储在服务器上的数据匹配。
您可以同时使用会话和 cookie 来存储: 身份验证数据、用户首选项、电子商务网站中图表的内容等等。.
以下是各种解决方案的优缺点。这些是我首先想到的,当然还有其他的。
饼干优点:
饼干锦囊:
节目优点:
节目提示:
是的,您可以创建只能在服务器端读取的 Cookie。这些被称为“仅 HTTP”-cookies,正如其他答案中已经解释的那样
不,没有办法(据我所知)创建只能在客户端读取的“ cookies”。Cookie 旨在促进客户机与服务器之间的通信。
但是,如果你想要类似“客户端专用 cookie”的东西,有一个简单的答案: 使用“本地存储”。
本地存储实际上在语法上比 cookie 更容易使用。一个关于 cookie 和本地存储的简单摘要可以在以下网址找到:
Https://courses.cs.washington.edu/courses/cse154/12au/lectures/slides/lecture21-client-storage.shtml#slide8
要点: 您可以使用 JavaScript 中创建的 cookies 来存储仅在客户端需要的 GUI 相关内容。但是,对于每个请求,cookie 都被发送到服务器,它成为 http 请求头的一部分,从而使请求包含更多的数据,因此发送速度更慢。
如果您的页面有50个诸如图像、 css 文件和脚本之类的资源,那么 cookie (通常)将随每个请求一起发送。是否每个 Web 请求都会发送浏览器 cookie?台将为您带来更多信息
本地存储没有与数据传输相关的缺点,它不发送数据。
在服务器上创建 Cookie 和在 客户?
你所指的是在客户端设置 Cookie 的两种方式,它们是:
服务器: 来自服务器的 Set-cookie响应头指示客户端在该特定域上设置 Cookie。实际创建和存储 Cookie 的实现位于浏览器中。对于同一域的后续请求,浏览器会自动为每个请求设置 Cookie请求标头,从而让服务器拥有一些状态到无状态的 HTTP 协议。浏览器使用 Domain和 Path Cookie 属性来确定将哪些 Cookie 发送到服务器。 服务器只接收 name=value对,仅此而已。
Set-cookie
Cookie
Domain
Path
客户: 可以使用 document.cookie = cookiename=cookievalue在浏览器上创建 cookie。但是,如果服务器不打算响应用户创建的任何随机 Cookie,那么这样的 Cookie 就没有任何用处。
document.cookie = cookiename=cookievalue
这些是否称为服务器端 Cookie 和客户端 Cookie?
Cookie 总是属于客户端,不存在服务器端 Cookie 这样的东西。
是否有方法创建只能在服务器上读取的 Cookie 还是在客户身上?
由于读取 Cookie 值取决于服务器和客户端,因此这取决于是否有任何一方需要读取 Cookie。 在客户端,通过设置 Cookie 的 HttpOnly属性,可以防止脚本(主要是 Javscript)读取 Cookie,从而作为防御机制,防止 Cookie 通过 XSS 被盗,但只将 Cookie 发送到预期的服务器。
HttpOnly
因此,在大多数情况下,由于 Cookie 用于带来“状态”(过去用户事件的内存) ,在客户端创建 Cookie 不会增加多少价值,除非有人知道服务器使用/响应的 Cookie。
参考资料: 维基百科