一、Cookie详解
Cookie是存储在客户端(一般指浏览器)的一段小数据,客户端通过HTTP协议与服务器进行Cookie交互。
在PHP中通过 setcookie() 函数来设置cookie ,但实质上php并没有设置cookie,他只是发出指令通知浏览器来做这件事。
setcookie() 介绍 :setcookie()函数
在使用setcookie时需注意:
1.在之前不能有任何输出,跟header()一样;
2.由php在当前页面设置的cookie不能立即生效,要等到下个页面才能看到;
3.cookie没有显示的删除函数,要删除cookie只能通过设置cookie让它过期;
4.如果不设置过期时间,cookie会在会话结束(即浏览器关闭)时过期并被清除。
5.如果设置了过期时间,cookie不会随着浏览器关闭而失效
6.出于安全考虑,httponly参数要设置为true ,即不让浏览器来操作cookie;限制domain 和 path 的有效范围;
Cookie分为两种:
1.以文件形式存在硬盘空间上的长期cookie。
要让cookie以文件的形式长期保存就必须在用setcookie设置cookie时指定过期时间。
禁用浏览器cookie指对这种形式的cookie有效。
2.停留在浏览器所占用内存中的临时性Cookie。
如果没有对cookie设置过期时间,那么cookie就不会以文件的形式保存在硬盘上,而是保存在内存中。当浏览器关闭后,cookie就会消失。对于这种形式的cookie就算浏览器禁用cookie也是没有效果的。
以前错误的以为session的有效期是到浏览器关闭后就停止了,其实不然。服务器创建session同时会在客户端生成一个名为PHPSESSID的cookie保存sessionID ,如果没对这个cookie设置有效期的话,他是保存在内存中的,所以当浏览器关闭后他也就消失了。如果对他设置了有效期,他就会保存到硬盘中,就不会随着浏览器的关闭而消失:
session_start(); $_SESSION['user'] = 'Eric'; setcookie(session_name(),session_id(),time()+3600);所以session的生命周期可以通过这种方式设置。
PS:火狐浏览器cookie保存路径:C:\Documents and Settings\磐石文印\Application Data\Mozilla\Firefox\Profiles\7hg4wsia.default\cookies.sqlite
Cookie应用示例:
1.自动登录:
当选中自动登录时,把用户名和密码用cookie的形式长期保存在客户端,下次登录的时候用传递过来的cookie跟数据库进行匹配。
火狐浏览器禁用Cookie方式:
查看Cookie方式:
二、Session详解:
Session工作原理:
当session启用时(session_start())服务器会通知客户端生成一个名为PHPSESSID的cookie保存sessionID,并在服务器的D:\xampp\tmp (该目录在php.ini中配置)下生成一个文件保存session值,文件名默认由‘sess_’+sessionID 构成 ,每次请求客户端的cookie都会通过http传递到服务器,用来匹配服务器的session文件。
Session的PHP创建方式:
session_start(); $_SESSION['user'] = 'Eric'; setcookie(session_name(),session_id(),time()+3600);
Session的存储方式:
默认情况下,session是以文件形式保存在硬盘的一个目录中的,所以当session比较多时,磁盘的读取速度会比较慢。一般情况下,一个目录的文件数超过2000,时读取速度就会很慢。所以要把session分目录存放。
php.ini 有一项:session.save_path = "N;MODE;/path" 。这项设置可以给Session存放目录进行多级散列,其中‘N’ 表示要设置的目录级数,‘MODE’ 表示目录的权限属性,默认600。‘/path’ 表示session文件的存放目录。
Session的回收:
session的回收是被动的,为了保证过期的Session能被回收,可以修改php.ini 中的session.gc_divisor = 100来提高回收效率。对于设置分级目录的session,php不会自动回收,需要自己实现回收。
Session入库: