我想在服务器端使用cookie开发一个想法,但我担心我不应该依赖cookie行为,因为以下引用说cookie是客户端和基于浏览器的对象:
HTTP cookie为服务器提供了存储和检索的机制 有关客户端应用程序系统的状态信息。
HTTP cookie(也称为Web cookie,Internet cookie,浏览器 cookie,或简称cookie)是从网站发送的一小段数据 并且当用户的网络浏览器存储在用户的计算机上时 用户正在浏览
Cookie通常用于标识用户。 Cookie是一个小文件 服务器嵌入用户的计算机
HTTP cookie(网络cookie,浏览器cookie)是一小块数据 服务器发送到用户的Web浏览器。浏览器可以存储 它将下一个请求发送回同一台服务器。
然而,在服务器端,我测试了在没有浏览器角色的情况下更改cookie的值可以正常工作。我想确保使用cookie是一种标准方式,所以我依靠它来生成一些临时数据I asked in this question。
<%
Response.Cookies("a")="test <br>"
response.write request.cookies("a")
Response.Cookies("a")="test1 <br>"
response.write request.cookies("a")
Response.Cookies("a")="test2 <br>"
response.write request.cookies("a")
Response.Cookies("a").Expires = DateAdd("d",-1,Now())
%>
结果:
test
test1
test2
页面标题中没有名称“a”的Cookie,并且访问者浏览器上没有创建任何对象。似乎cookie是在服务器上创建并杀死的,浏览器对此一无所知!
我的问题是,如果上面提到的参考文献的定义是错误的?他们是否遗漏了有关cookie服务器端特性的一些细节?如果我在服务器端使用cookie作为临时变量会有什么问题?
答案 0 :(得分:4)
没有“服务器端Cookie”之类的东西。混乱之处在于服务器要求浏览器存储cookie。这个Stack Overflow thread就是一个很好的例子:
浏览器请求示例:
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: */*
您可能正在寻找的是服务器端的用户会话(也在同一线程中引用)。 JEE实现通常依赖于jsessionid cookie来标识服务器端用户的数据。看看有关用户会话的Oracle's documentation:
术语“用户会话”是指一系列用户应用程序 服务器跟踪的互动。会话用于 维护用户特定的状态,包括持久对象(例如 EJB组件或数据库结果集的处理)并通过身份验证 用户身份,以及许多互动。例如,一个会话可以 用于跟踪经过验证的用户登录,然后跟踪一系列 针对特定用户的定向活动。