【发布时间】:2010-06-21 06:55:04
【问题描述】:
什么是 php 中的会话和 cookie,它们存储在哪里?
我搜索了但我找不到确切的答案。
【问题讨论】:
-
没有确切的答案。这取决于您的服务器的配置方式。
标签: php
什么是 php 中的会话和 cookie,它们存储在哪里?
我搜索了但我找不到确切的答案。
【问题讨论】:
标签: php
HTTP 是 stateless。这意味着每当您从网络服务器请求某些内容时,它都会为请求的页面提供服务并立即忘记您。
想象一个购物车:
您在购物车中添加了一些东西。服务器将有某种数据存储来记住您将物品 X 放入购物车,但由于 HTTP 是无状态的,下次您调用服务器时,它不会记住是您将物品放入购物车。网络服务器可以在返回的页面上创建一个表单,并使用您添加的每个项目来填充它。现在您添加另一个项目,但也发送您已经添加的项目。重复。这有效地转移了您对每个请求的交互的整个状态。但这相当低效和不安全。
使用Sessions enabled,网络服务器将为您创建一个唯一的ID,即所谓的Session ID。这将用于在后续请求中链接您和购物车。通常,会话 ID 在Cookie 中发送到浏览器。从技术上讲,这是通过 HTTP 标头发生的:
Set-Cookie: PHP_SESS=abcdefg123456
浏览器读取标头并在浏览器内的 cookie 存储中创建或更新 cookie 文件。通常 cookie 文件只不过是您计算机上文本文件中的键/值存储。如果你想看看他们谷歌“[浏览器名称]在哪里存储我的cookies”。
在对同一网络服务器的下一次请求时,您的浏览器将发送 cookie,网络服务器现在可以将此 ID 与服务器上的某些数据存储(无论设置为session save handler)相关联,例如登录信息、购物车的内容等
有关详细信息,请参阅我在您的问题下方链接的 PHP 手册参考。
【讨论】:
Cookie 存储在浏览器中,而不是 PHP 中。您可以通过查看 $_COOKIE['cookiename'] 来获取浏览器发送的 cookie,但据我所知,您不能设置这样的 cookie - 您需要使用 setCookie(),或者可能使用 header('Set-cookie: ...')。
会话可以存储在任何地方,但它们通常只是服务器文件系统上的文件;您的php.ini(或ini_get() 函数)可能有助于找出位置。试试:
$session_file_name = ini_get('session.save_path')."/sess_".session_id();
【讨论】:
【讨论】:
This session id is most of the time stored in a cookie. 如果不在浏览器 cookie 中,它会存储在哪里?
session.use_trans_sid必须在php.ini中启用(并且php必须用--enable-trans-sid编译
Cookie 是存储在客户端(浏览器)的一小段数据,而 session 是存储在服务器端的文本文件,其名称存储在 cookie 中。
就是这样。
【讨论】: