【问题标题】:working with cookies without sending to the browser and document headers在不发送到浏览器和文档标题的情况下使用 cookie
【发布时间】:2018-10-15 19:14:23
【问题描述】:

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

Microsoft:

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

Wikipedia:

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

W3schools:

cookie 通常用于识别用户。 cookie 是一个小文件 服务器嵌入到用户的计算机

Mozila.org:

HTTP cookie(网络 cookie、浏览器 cookie)是一小段数据 服务器发送到用户的网络浏览器。浏览器可能存储 并将其与下一个请求一起发送回同一服务器。

但是,在服务器端,我测试了在没有浏览器角色的情况下更改 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 作为临时变量会出现什么问题?

【问题讨论】:

    标签: cookies browser server-side client-side


    【解决方案1】:

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

    【讨论】:

    • 感谢您的参考。在我的示例代码中,cookie 和 session 有什么区别?使用 cookie 代替会话或变量可以吗?
    • Session 和 cookie 通常一起工作,例如我的 jsessionid 示例。你的代码是 ASP 吗?检查this website 以了解差异。要在会话中存储一些东西,你应该这样做 Session("key") = "value"。
    猜你喜欢
    • 2019-11-05
    • 1970-01-01
    • 2019-03-28
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    相关资源
    最近更新 更多