【问题标题】:Which end creates sessions/cookies?哪一端创建会话/cookie?
【发布时间】:2011-02-11 22:50:42
【问题描述】:

这是正确的吗?

我使用前端 javascript 创建 cookie,并使用后端语言(php、ruby 等)创建会话?

如果这是真的,创建会话是否意味着浏览器必须创建一个保存 SID 的会话 cookie?后端语言如何创建 cookie,不是只有 javascript 才有可能吗?

【问题讨论】:

    标签: php javascript ruby session cookies


    【解决方案1】:

    php 有 setcookie 函数来设置一个 cookie。

    cookie 只是一小段数据(名称和值),在每次请求时都会被发送和转发。您可以使用 JavaScript 在客户端上设置 cookie,以便在下一个请求时将其发送回服务器,但您也可以在 PHP 中设置它,因此它会在响应中发送到浏览器并存储在那里。我相信 sessionid 也存储在 cookie 中。

    【讨论】:

    • 如果 cookie 是会话 cookie(由 php 创建而不是用 javascript 创建),那么 sessionid 会存储在 cookie 中,对吗?
    • 是和不是。 cookie 是没有到期日期的会话 cookie(它在会话结束时自动销毁)。这些 cookie 也可以使用 javascript 创建。会话 ID 存储在这样的 cookie 中。那是因为 HTTP 是无状态的。每个请求对服务器来说都是全新的。为了解决这个问题,可以使用 cookie 来存储数据。为了防止每条数据一次又一次地来回发送(包括潜在的私有数据),这些数据保存在服务器上,并且只有一个会话 ID存储在 cookie 中,以便在下一个请求时识别该数据。
    【解决方案2】:

    Cookies 是在服务器端创建的:当服务器响应时,它会在 http 标头中包含一个 cookie。浏览器在每次请求时将其传递回服务器。服务器可以在需要时更新 cookie。

    Browser ------------------------------> Server
            <---- Set Cookie --------------
            --------- Cookie ------------->
    

    【讨论】:

    • 我可能是错的,但我不认为这是正确的。您可以使用 javascript 设置 cookie,cookie 是客户端(存储在用户的浏览器中)。
    • 是的,你可以。它也很常用。
    • 好点,虽然这肯定不是常见的情况。我会更新我的答案。
    • 当 javascript 需要记住页面重新加载之间的内容时,它会很方便。我已经在分页的项目列表中看到了这个。选定的项目被记住在 cookie 中,因此 JavaScript 可以显示来自其他页面的选定项目。此外,在访问站点上的另一个页面并从该页面返回时会记住该选择。不过,我同意这不是最常见的用途。
    【解决方案3】:

    Cookie 附加到 http 请求和响应的标头。这使浏览器和服务器可以访问它们。 cookie 中唯一的常量是它所绑定的域。

    【讨论】:

    • 但是当我使用javascript创建cookie时,它与标题无关吗?
    • 错了。饼干就是饼干。不管是谁创造的。它是存储在浏览器中并在每次请求时从浏览器发送到服务器的一条信息。在 PHP 中创建的 cookie 被发送到浏览器并存储在那里。响应结束后,您无法判断是 PHP 还是 JavaScript 创建了 cookie。
    猜你喜欢
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 2011-09-17
    • 2011-12-03
    • 2018-05-25
    相关资源
    最近更新 更多