使用cookie而不发送到浏览器和文档标题

Ali*_*our 9 browser cookies server-side client-side

我想在服务器端使用cookie开发一个想法,但我担心我不应该依赖cookie行为,因为以下引用说cookie是客户端和基于浏览器的对象:

微软:

HTTP cookie为服务器提供了在客户端应用程序系统上存储和检索状态信息的机制.

维基百科:

HTTP cookie(也称为Web cookie,Internet cookie,浏览器cookie或简称cookie)是从网站发送的一小段数据,当用户浏览时由用户的Web浏览器存储在用户的计算机上

W3schools:

Cookie通常用于标识用户.Cookie是服务器嵌入用户计算机的小文件

Mozila.org:

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())
%>
Run Code Online (Sandbox Code Playgroud)

结果:

test
test1
test2
Run Code Online (Sandbox Code Playgroud)

并且页面标题中没有名称为"a"的 cookie,并且访问者浏览器上没有创建任何对象.似乎cookie是在服务器上创建并杀死的,浏览器对此一无所知!

我的问题是,如果上面提到的参考文献的定义是错误的?他们是否遗漏了有关cookie服务器端特性的一些细节?如果我在服务器端使用cookie作为临时变量会有什么问题?

Fab*_*ano 5

不存在“服务器端 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 组件或数据库结果集的句柄)和经过身份验证的用户身份以及许多交互。例如,会话可用于跟踪经过验证的用户登录,然后跟踪特定用户的一系列定向活动。