setcookie()和$_SESSION与session.use_only_cookies有什么区别?

5
我们可以通过setcookie()向访问者的浏览器发送一些cookie。当使用$_SESSION['value']定义值时,如果使用session.use_only_cookies,会话将仅存储在访问者的浏览器上。这两种情况有什么区别?
编辑:显然,它们基本上是不同的。我只是指它们的应用程序上的区别。我们可以在客户端设置一个值,可以使用$_COOKIE或$_SESSION在任何时候(在到期之前)进行检索;例如,用于识别返回的访问者。
3个回答

6

Cookie 存储在客户端(即 "在" 客户端/浏览器内)。
_SESSION 序列化后存储在 服务器上。这些数据与一个会话 ID 相关联。例如,默认的文件系统会话处理程序使用该文件名反映会话 ID。客户端(或您的脚本)必须在后续请求中提供该会话 ID,以便 PHP 的会话管理可以/将重新加载会话数据。一种机制是使用 cookies。session.use_only_cookies=On 使 PHP 的会话机制仅查找 cookies 中的会话 ID。


当我们设置session.use_only_cookies时,会话也将存储在客户端。这确实是我的问题。 - Googlebot
不,只有会话 ID 作为 cookie 传输,而不是会话数据本身。 - VolkerK
一个有趣的观点(至少对我来说是这样)。那么,你的意思是我们只在客户端存储会话ID,当运行 $_SESSION 时,我们从访问者的浏览器中读取会话ID,并根据该ID从服务器读取相应的会话值? - Googlebot
1
@Ali 的 use_only_cookies 只影响 sessionid 而不是会话数据。如果将其设置为 true,则 PHP 仅使用存储在 cookie 中的会话 ID 来识别用户。会话数据始终存储在服务器上。请参阅 http://www.php.net/manual/en/session.configuration.php#ini.session.use-only-cookies。 - Oliver A.

6
不,当你设置session.use_only_cookies时,会话数据不会存储在客户端。这个设置只影响会话ID在客户端和服务器之间传输的方式。
基本上有两种传输会话ID的方式:
  • 基于cookie
  • 基于URL(使用类似PHPSESSID=...的GET变量)
当使用session.use_only_cookies设置时,它会阻止使用URL传输会话ID,只能使用cookie。

5
这些是完全不同的东西:
  1. setcookie()在浏览器中设置一个cookie,但这通常不是会话cookie。您可以使用session_start()创建会话cookie。
  2. $_SESSION[]在服务器端将值设置/获取到会话中。
  3. session.use_only_cookies将确保会话ID仅与cookie一起发送,而不是例如在URL中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接