`

cookie和会话(一)

    博客分类:
  • php
 
阅读更多

  cookie解决了跟踪各个访问者或用户,服务器利用cookie这种机制将少量的信息随着响应发送到客户机。这些信息由名称和值组成,都是最为文本字符串发送的。当客户机对服务器发送的另一个请求时,它将从这个服务器收到的任何cookie随着新的请求一起发送回去。

1:基本操作------ 设置和访问cookie

1> 设置:  

   setcookie(cookie_name,cookie_value);

   这个函数对提供给它的cookie值进行转移,以便可以安全地作为HTTP响应消息的一部分发送。只要浏览器开着cookie就会一直存在,但是只要浏览器关闭cookie就会被删除。 调用这个函数的一个问题是与header一样,在调用这个函数之前不能有任何输出。因为cookie是作为响应头的一部分发送的。

2>访问:

    使用$_COOKIE超级全局变量来访问

    php只用随一个页面请求发送的cookie填充$_COOKIE数组,因此,如果在任何调用setcookie('cookie_name','cookie_value')执行以下代码

setcookie('cookie_name','cookie_value');echo $_COOKIE['cookie_name'];就会收到一个警告,指出cookie_name键还没有设置。同样在代码中设置新的cookie值后,$_COOKIE还没有来得及进行更新新的值,只会用随着请求接收到的cookie值来填充$_COOKIE这个值。

2:cookie如何工作

服务器通过随着响应发送一个Set_Cookie头,在客户机中设置一个cookie。(多个cookie需要设置多个cookie头。)尽管在响应中多个cookie是用不同的Set_Cookie头发送的,但是在请求中它们在一个单一的Cookie头中一起发送回服务器,各个cookie名/值对由空格分隔。

 

Connection	Keep-Alive
Content-Length	0
Content-Type	text/html
Date	Wed, 05 Dec 2012 14:15:35 GMT
Keep-Alive	timeout=5, max=100
Server	Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1
Set-Cookie	mysite=1234
X-Powered-By	PHP/5.3.8

 

 

Connection	Keep-Alive
Content-Length	0
Content-Type	text/html
Date	Wed, 05 Dec 2012 14:21:25 GMT
Keep-Alive	timeout=5, max=100
Server	Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1
Set-Cookie	user=jcyzone pwd=81dc9bdb52d04dc20036dbd8313ed055
X-Powered-By	PHP/5.3.8

 3:控制cookie的有效性

setcookie函数最多接收六个参数

bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] 后四个。参数是用来控制和限制cookie的可用性。

1>expire参数可以控制cookie的有效期,eg:setcookie('one_hour','still good',time()+3600);在cookie过期之后,Web浏览器就不再将它随着请求一起发送回服务器。将这个参数设置为0,就表示这个应该被认为是一个会话cookie(session cookie)。它存储在内存中,而不是硬盘上,而且只有在用户正在进行浏览时它才是有效的。在用户关闭Web浏览器之后,cookie值就消失了。( 注意:现在大多数浏览器是多线程的,每一个新的浏览器窗口都是同一个主浏览器进程中的一个新的线程。这可以使Web浏览器快一点并且共享许多资源,比如内存。因此,即使关闭了一个会话cookie及相关联窗口,但是同一个浏览器进程的其他窗口很可能仍然在内存中保存这这个cookie,因此关闭所有浏览器窗口才能确保cookie确实消失了。)

2>path参数可以限制这cookie对那些页面是有效的。例如将路径设置为'/',那么这个cookie对于站点所有页面都是有效的;但是如果将它设置为'/admin',那么只对站点上URL以/admin开头的页面有效。如果没有指定,那么默认是这个cookie时所在的目录。

3>domain参数可以限制或扩展这个cookie对那些机器有效。在默认的情况下,它对发送它的服务器有效。但是如果许多服务器共同承担Web应用程序负载,这些机器的名称都是www.example.com的形式,那么可以将参数设置为‘.example.com’这意味着对这个域中的任何机器有效。

4>最后secure参数设置为1,那么表示cookie只在HTTPS连接上有效。默认值0表示在安全连接和不安全连接都有效,但是,这个参数不会改变cookie在用户计算机上作为明文存储的事实。

 4:删除cookie

有时候,可能不再想要一个cookie,希望删除它。一个办法就是让他在客户机上过期,

setcookie('cookie_name','cookie_value',time()-3600);这样客户机意识到已经过期,让程序把它清理掉。

5:cookie数组

PHP有一种方便的机制,可以通过它将数组和cookie联系起来

example:

setcookie('UserInfo[name]',$_POST['name']);

setcookie('UserInfo[address]',$_POST['address']);

setcookie('UserInfo[birth_date]',$_POST['birth_date']);

在下一次访问cookie就可以访问如下

$name = $_COOKIE['UserInfo']['name'];

$address = $_COOKIE['UserInfo'][address];

$birth_date = $_COOKIE['UserInfo']['birth_date'];

6:cookie应用

知道把什么放在里面,尽管cookie是一种可以将信息与特定客户机关联在一起非常方便,但是它有许多缺点,它以不安全的明文格式在因特网上传输在客户机上存储,cookie包含的数据量有限制(常常只有4KB)。

一般规则是不要将太多的数据放在cookie中,而是将它作为标致来帮助我们管理用户。如果希望在用户界上存储确保它是无害的,不构成安全威胁。

1>个性化方式欢迎重返站点要求他登陆2>用户的个人设置

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics