2012-11-08 102 views
-1

Cookie允许您的应用程序在Web客户端上存储少量文本数据(通常为 4-6kB)。 cookie的使用方式有很多,尽管 最常用的是维护会话状态.Cookies通常由服务器使用响应头设置,随后由客户端作为请求头提供。Cookie如何保持会话状态?

这是来自zce学习指南。

我的问题是

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

这是很好覆盖的手册:http://php.net/manual/en/features.cookies.php –

+0

+1针对上述评论,你真的应该刚才搜索。 – freshnode

回答

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

+0

因此,当我们请求一个页面时,所有这些cookies将通过请求标头发送到服务器中 –

+0

这是正确的。 – freshnode

1

非常短:

会话ID创建被发送到客户端上的每个请求,这是存储在一个通常被称为PHPSESSID的cookie。客户端用这个会话ID来响应,告诉服务器它属于哪个会话。

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

+0

所以当我们请求一个页面时,所有的cookies都会通过请求头发送到服务器 –

+0

只有标识符而不是cookies。 :) – Undrium