在服务器和客户端上创建cookie有什么区别?这些是服务器端cookie和客户端cookie吗?有没有办法创建只能在服务器或客户端上读取的cookie?
答案 0 :(得分:125)
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
这里有两个cookie 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优点:
Cookie缺点:
会话优点:
会话缺点:
答案 1 :(得分:51)
您可能意味着Http Only cookies与其对应部分之间存在差异?
Http只能在客户端JavaScript(仅服务器端)访问(读取或写入)cookie。如果未设置Http Only标志,或者在(客户端)JavaScript中创建cookie,则可以在(客户端)JavaScript和服务器端读取和写入cookie。
答案 2 :(得分:28)
所有Cookie都是客户端和服务器
没有区别。常规cookie可以设置为服务器端或客户端。 “经典”cookie将随每个请求一起发回。由服务器设置的cookie将在响应中发送到客户端。服务器仅在显式设置或更改cookie时发送cookie,而客户端在每个请求上发送cookie。
但基本上它是相同的cookie。
但是,行为可以改变
Cookie基本上是name=value
对,但after the value可以是一串分号分隔的属性,它们会影响Cookie的行为 if < / em>它是由客户端(或服务器)实现的。
这些属性可以是关于生命周期,上下文和各种安全设置。
仅限HTTP(不仅限服务器)
服务器可以设置其中一个属性,以指示它是仅HTTP的cookie。这意味着cookie仍然来回发送,但它不能在JavaScript中使用。但请注意,cookie仍然存在!它只是浏览器中的内置保护,但如果有人会使用像IE5这样荒谬的旧浏览器,或者某些自定义客户端,他们实际上可以读取cookie!
所以看起来有'服务器cookie',但实际上没有。这些cookie仍然发送给客户端。在客户端上,无法阻止cookie被发送到服务器。
实现“唯一”的替代方案
如果您只想在服务器上存储一个值,或者只在客户端上存储一个值,那么您需要一些其他类型的存储,例如服务器上的文件或数据库,或客户端上的本地存储。
答案 3 :(得分:2)
是的,您可以创建只能在服务器端读取的cookie。这些被称为“仅HTTP” -cookie,如其他答案中所述
不,(我知道)没有办法创建只能在客户端读取的“ cookie”。 Cookies旨在促进客户端与服务器之间的通信。
但是,如果您想要类似“ client-only-cookies”的选项,则有一个简单的答案:使用“本地存储”。
实际上,本地存储在语法上比cookie更简单。有关Cookie与本地存储的简要概述,请访问:
要点:您可能会使用在JavaScript中创建的cookie来存储只在客户端需要的与GUI相关的内容。但是对于每次发出的请求,cookie都会发送到服务器,它成为http-request标头的一部分,因此使请求包含更多数据,因此发送速度较慢。
如果您的页面有50个资源(例如图像,css文件和脚本),则cookie(通常)随每个请求发送。 Does every web request send the browser cookies?
中的更多内容本地存储没有那些与数据传输有关的缺点,它不发送任何数据。太棒了。
答案 4 :(得分:0)
在服务器和服务器上创建cookie有什么区别 客户?
您所指的是可以在客户端上定向设置cookie的2种方法,即:
通过服务器:
来自服务器的Set-cookie
响应标头指示客户端在该特定域上设置cookie。实际创建和存储cookie的实现位于浏览器中。对于对同一域的后续请求,浏览器会自动为每个请求设置Cookie
请求标头,从而使服务器将某种状态设为原本无状态的HTTP协议。浏览器使用Domain
和Path
cookie属性来确定要将哪些cookie发送到服务器。
服务器仅接收name=value
对,仅此而已。
通过客户:
可以使用document.cookie = cookiename=cookievalue
在浏览器上创建cookie。但是,如果服务器不打算响应用户创建的任何随机cookie,那么这种cookie就没有用。
这些叫服务器端Cookie和客户端Cookie吗?
Cookie始终属于客户端。没有服务器端Cookie。
有没有一种方法可以创建只能在服务器上读取的cookie 还是在客户身上?
由于读取cookie值取决于服务器和客户端,因此取决于是否需要读取cookie。
在客户端,通过设置cookie的HttpOnly
属性,可以防止脚本(主要是Javscript)读取您的cookie,从而充当通过XSS防止cookie盗窃的防御机制,但会将cookie发送给仅限目标服务器。
因此,在大多数情况下,由于使用cookie来带来“状态”(过去用户事件的记忆),因此在客户端创建cookie不会增加太多价值,除非人们知道服务器使用/响应的cookie。
参考:Wikipedia