PHP如何在不使用函数setcookie()或setrawcookie()的情况下将PHPSESSID设置为$ _COOKIE超全局变量?

时间:2017-10-11 15:19:56

标签: php session cookies session-cookies setcookie

我正在学习PHP最重要且最难理解的概念。 “会话和Cookie”

根据我的理解,只能使用setcookie()setrawcookie()函数将Cookie设置到浏览器中。

根据我对会话过程的理解,它按以下方式工作。

  • 使用session_start()函数启动每个会话。
  • session_start()函数必须位于页面上任何HTML(包括空行)之前。
  • session_start()函数生成随机会话ID并将其存储在用户计算机上的cookie中(这是实际存储在客户端的唯一会话信息。)
  • Cookie的默认名称为PHPSESSID。要在我的PHP代码中引用会话ID,我会引用变量$ PHPSESSID(它是一个cookie名称)

如果我的理解在上述说明的任何地方都有误,请纠正我。

我怀疑是因为会话在$_COOKIE超全局中设置了一些值,它无处使用任何函数setcookie() or setrawcookie(),那么会话ID如何被存储为cookie变量?

如果我假设会话ID被设置为cookie变量并且setccookie() or setrawcookie()可能已在内部调用,那么在调用任一函数setccookie() or setrawcookie()以设置cookie值时设置的参数值是什么?

谢谢。

1 个答案:

答案 0 :(得分:5)

  

Cookie的默认名称为PHPSESSID。要在我的PHP代码中引用会话ID,我会引用变量$PHPSESSID

不,它只是cookie的名称,不会被设置为全局变量。您可以访问$_COOKIE['PHPSESSID']中的值。但实际上,这根本不应该关注你,你应该只使用session_* functions$_SESSION超全局与PHP的会话API进行交互,使用的底层cookie不是你关心的问题对于大多数意图和目的。

  

...它无处使用任何功能setcookie()setrawcookie() ......

     

如果我假设会话ID被设置为cookie变量,而setccookie()setrawcookie()可能已在内部调用...

是的,PHP正在内部调用一些函数来设置cookie。它可能既不是setcookie也不是setrawcookie,而是一些设置cookie的内部C函数。再说一遍,你真的没关注。您只需要了解调用session_start将以某种方式在内部导致设置cookie。

  

...然后调用函数setccookie()setrawcookie()设置cookie值时设置的参数值是什么?

这些由the various session.cookie_* parameters确定,您可以通过session_set_cookie_paramsini_set进行设置。