【发布时间】:2018-03-23 08:26:48
【问题描述】:
我正在学习 PHP 中最重要且最难理解的概念,即。 “会话和 Cookie”
据我了解,只能使用setcookie() 或setrawcookie() 函数将cookies 设置到浏览器中。
根据我对会话过程的理解,它的工作方式如下。
- 每个会话都使用 session_start( ) 函数启动。
- session_start( ) 函数必须位于页面上的任何 HTML(包括空行)之前。
- session_start() 函数生成一个随机的 Session Id,并将其存储在用户计算机上的 cookie 中(这是唯一实际存储在客户端的会话信息。)
- cookie 的默认名称是
PHPSESSID。为了在我的 PHP 代码中引用会话 ID,我将引用变量 $PHPSESSID(它是一个 cookie 名称)
如果我在上述解释中的任何地方理解有误,请纠正我。
我的疑问是会话在$_COOKIE superglobal 中设置了一些值,它无法使用setcookie() or setrawcookie() 中的任何函数,那么会话ID 仍然如何存储为cookie 变量?
如果我假设会话 id 设置为 cookie 变量,并且可能已在内部调用 setccookie() or setrawcookie(),那么在调用任一函数 setccookie() or setrawcookie() 设置 cookie 值时设置的参数值是什么?
谢谢。
【问题讨论】:
-
不,你不想引用
$PHPSESSID。要获取会话 ID,请不带参数调用session_id()。它将返回当前会话。 -
是的,
session_start将创建一个$_COOKIE值。不,您不应该通过各种 cookie 函数直接与此值交互 - 让 PHP 处理它。 -
@ceejayoz Nitpick:
session_start不会在$_COOKIE中创建任何内容;它需要另一个往返才能让 cookie 出现在那里...... :-P -
从技术上讲,
setcookie没有在浏览器上设置任何内容。它修改了一个内部 cookie 数组,然后用它告诉浏览器服务器希望它记住一些 cookie。浏览器可以选择完全忽略这一点。 -
无论如何,这一切都有些学术性,因为会话 ID 甚至可能不会被 cookie 持久化。总而言之,在处理会话时,处理会话 - cookie 是无关紧要的。
标签: php session cookies session-cookies setcookie