【问题标题】:if sessions are stored in files why are cookies still used to store them?如果会话存储在文件中,为什么仍然使用 cookie 来存储它们?
【发布时间】:2017-06-25 13:40:57
【问题描述】:

客户: start_session() 创建一个 cookie(默认):Name: PHPSESSID; Content: 1q2w3e4r5t; Domain: '/'; Expires:...

服务器: 它还创建了一个存储在(我的案例)中的文件:/var/lib/php/sessions。在那里打电话:sess_1q2w3e4r5t。 (绝对路径:/var/lib/php/sessions/sess_1q2w3e4r5t

所以我们有两个物理的东西绑定到我刚刚创建的会话。

  • 两者兼有有何意义?

  • 无论use_only_cookies 选项如何,我都可以将我的会话存储在/var/lib/php/sessions 中吗?

  • 我有一个带有$_SESSION['counter'] 变量的经典示例。这意味着,每次我重新加载 example.php 页面时,$_SESSION['counter'] 都会增加(++)1。因此,在按下F5 按钮的循环中,假设我得到55 作为$_SESSION['counter'] 的值。最后我是那个 cookie,但 不是 /var/lib... 文件。删除之后我得到一个 56 并且循环正常继续。这只是引起了我的兴趣并让我想到了这个问题。是否需要会话 cookie?

  • 我的网站是否仍然可以只在服务器中存储会话而不使用 cookie?

这就是我删除 cookie 的方式。注意counter 的值为 69。

然后F5:

【问题讨论】:

  • 嗯?没有 cookie,您的所有请求都将是无状态的。
  • 但是.. 就像我说的,在删除 cookie 之后,$_SESSION['counter'] 仍然保持相同的值...如果我将其称为一种请求时,请纠正我
  • 您是否混淆了删除 cookie 与删除会话或会话变量不同的事实?你必须在 PHP 中使用unset($_SESSION['counter'])失去它的价值。
  • 好吧,最近我读到了cookies vs sessionsthis question。我意识到一个存储在服务器中,另一个存储在客户端。但是,仍然可能是我的网站仅在服务器中存储会话而不使用 cookie 的一种方式?
  • PHP 用于会话的 cookie 是 PHPSESSIDGLOBAL_SESS 一定是你在某处设置的。

标签: php session cookies


【解决方案1】:

cookie 在那里,以便客户端可以告诉服务器哪个会话文件是他们的。 cookie 值对应于在服务器上创建的文件。

没有它,服务器只会为客户端创建一个新的会话文件,显然之前的请求中的任何数据都不会存在。

我只能想象你没有正确删除 cookie。

【讨论】:

  • 我会标记会话文件以获取会话 ID:sess_ + 1q2w3e4r5t。因此,不需要 cookie。
  • 那么你怎么知道在两个后续请求中客户是否是同一个人呢?您只是在谈论服务器端的事情。客户端需要告诉服务器哪个会话是他们的。
【解决方案2】:

访问您网站的访问者被分配了一个唯一的 ID,即 所谓的会话ID。这要么存储在用户的 cookie 中 侧或在 URL 中传播。

  • 同时拥有 session 和 cookie 的重点是上面的引用

简而言之:没有 cookie,客户端会变成陌生访客

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 2020-12-26
    • 2010-12-29
    • 1970-01-01
    相关资源
    最近更新 更多