提问人:Ali Sheikhpour 提问时间:5/5/2018 最后编辑:NIMISHANAli Sheikhpour 更新时间:9/13/2018 访问量:2576
在不发送到浏览器和文档标题的情况下使用 Cookie
working with cookies without sending to the browser and document headers
问:
我想在服务器端使用 cookie 开发一个想法,但恐怕我不应该依赖 cookie 行为,因为以下参考资料表明 cookie 是客户端和基于浏览器的对象:
HTTP Cookie 为服务器提供了存储和检索的机制 客户端应用程序系统上的状态信息。
维基百科:
HTTP Cookie(也称为 Web Cookie、Internet Cookie、浏览器 cookie,或简称cookie)是从网站发送的一小段数据 并由用户的 Web 浏览器存储在用户的计算机上,而 用户正在浏览
W3学校:
Cookie通常用于识别用户。Cookie 是一个小文件 服务器嵌入到用户的计算机上
HTTP cookie(Web cookie、浏览器 cookie)是一小段数据 服务器发送到用户的 Web 浏览器。浏览器可能会存储 它并将其与下一个请求一起发送回同一服务器。
但是,在服务器端,我测试了更改 cookie 的值可以在没有浏览器角色的情况下正常工作。我想确保这种使用 cookie 是一种标准方式,所以我依靠它来生成我之前在这个问题中提出的一些临时数据。
<%
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 作为临时变量,会有什么问题?
答:
没有“服务器端 cookie”这样的东西。令人困惑的是,服务器要求浏览器存储cookie。这个 Stack Overflow 线程给出了一个很好的例子:
浏览器请求示例:
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 关于用户会话的文档:
术语用户会话是指一系列用户应用程序 服务器跟踪的交互。会话用于 维护用户特定状态,包括持久性对象(如 处理 EJB 组件或数据库结果集)并经过身份验证 用户身份,在许多交互中。例如,会话可以 用于跟踪已验证的用户登录,后跟一系列 特定用户的定向活动。
评论