Cookie如何维持会话状态?

时间:2012-11-08 10:45:16

标签: php session cookies session-state

Cookie允许您的应用程序存储少量文本数据(通常情况下, 4-6kB)在Web客户端上。但是,cookie有许多可能的用途 最常见的一种是维护会话状态。通常由服务器使用响应头设置,并随后由客户端作为请求头提供。

这是来自zce学习指南。

我的问题是

1. how a session state is maintained by cookie?
2. what happens to these cookies when we use session_destroy()?

2 个答案:

答案 0 :(得分:1)

很短:

创建会话ID,在每次请求时将其发送到客户端,该会话ID存储在通常称为PHPSESSID的cookie中。客户端使用此会话ID进行响应,以告知服务器它属于哪个会话。

session_destroy仅取消设置数据,而不取消身份。因此,使用该方法不会触及cookie。

答案 1 :(得分:1)

简单地说,会话cookie在您导航给定站点时将远程会话绑定到您的浏览器。它包含一个通常沿PHPSESSID=3432DFGDFG43523行的字符串,远程服务器将其标识为它正在管理的会话。

来自PHP网站:

  

访问您网站的访问者被分配了一个唯一的ID,即   所谓的会话ID。这可以存储在用户的cookie中   在URL中传播或传播。

     

会话支持允许您在请求之间存储数据   $ _SESSION超全局数组。当访问者访问您的站点时,PHP   将自动检查(如果session.auto_start设置为1)或打开   您的请求(显式通过session_start()或隐式通过   session_register())是否已发送特定会话ID   请求。如果是这种情况,则先前保存的环境是   重新创建。

http://www.php.net/manual/en/intro.session.php

调用session_destroy()时,它的行为并不像您期望的那样。远程销毁会话,但不删除本地cookie。要执行此操作,您需要使用负日期调用setcookie(<session cookie name>)以在客户端销毁它。再次,从PHP网站:

  

session_destroy()会销毁与当前关联的所有数据   会话。它不会取消任何与之相关的全局变量   会话,或取消设置会话cookie。要使用会话变量   再一次,必须调用session_start()。

     

为了完全杀死会话,喜欢将用户注销掉,   会话ID也必须取消设置。如果使用cookie来传播   会话ID(默认行为),然后会话cookie必须是   删除。 setcookie()可以用于此。

http://www.php.net/manual/en/function.session-destroy.php