如果禁用cookie,PHP会话如何工作?

时间:2009-03-05 08:27:19

标签: php session cookies

我试图研究这种机制,但只找到提示,但这些并不是很一致。如何将session _id发送到浏览器,以及当用户请求新页面时,浏览器如何指示返回它?

谢谢,克里斯

3 个答案:

答案 0 :(得分:28)

PHP将做两件事:

  • 它将重写所有链接以传递额外的GET参数,通常为PHPSESSID,但可以通过在php.ini中设置session.name来更改
  • 它将在所有<form>开始标记后添加一个名称相同的隐藏输入。

请注意,这是一件危险的事情,因为复制/粘贴包含PHPSESSID参数的URL将能够在网站上共享您的登录会话 - 网络服务器没有简单的方法告诉您与您发送链接的人不同...

答案 1 :(得分:0)

PHP自己的会话模块支持从GET和POST数据中获取会话ID(除了cookie)。您可以使用http://uk.php.net/manual/en/session.configuration.php#ini.session.use-trans-sidhttp://uk.php.net/manual/en/session.configuration.php#ini.url-rewriter.tags让php处理id的转发。但无论如何请记住,特别是如果您使用GET传输ID,则您的某些用户更有可能意外泄露其(有效)会话ID。

底层机制不关心如何会话ID从客户端传输到服务器。只要你将“正确”值传递给session_id(),它就会起作用 - 即使你做了一些奇怪的事情(愚蠢?)滥用etag-header作为会话id的载体; - )

答案 2 :(得分:0)

会话通过为每个访问者创建唯一ID(UID)并根据此UID存储变量来工作。 UID要么(1)存储在cookie中,要么(2)在URL中传播。