cookie
cookie计数器
- 题目:
第一次刷新显示1,第2,3,4...n次刷新显示n
第一次 浏览器 -> apache (给浏览器一个cookie)
第二次 浏览器 (带着cookie) -> apache (更改浏览器的cookie)
答:
先setcookie--分配给--浏览器-->cookie值,下次直接加
if(!isset($_COOKIE['num'])) {
setcookie('num',1);
} else {
setcookie('num' , $_COOKIE['num'] +1);
}
echo $_COOKIE['num'];
注:这种办法永远比浏览器慢一拍,这是因为如果setcookie ,$_COOKIE想获取cookie的值,需要在下一次请求中才可以访问到
借助临时变量来帮忙
计算器终极改进:
if( !isset($_COOKIE['num']) ) {
$num = 1;
setcookie('num' , $num);
} else {
$num = $_COOKIE['num'] + 1;
setcookie('num' , $num);
}
echo $num;
setcookie的第3个参数,表示cookie的声明周期,需要用时间戳来表示,不加为关闭浏览器清除cookie
setcookie('sec' , '!!!' , time()+10);
cookie的第四个参数 ,当不加时,只能同级的子目录下能访问到设置的cookie,在上级目录是访问不到的,加上‘/’,代表本个域名的根目录都可以访问到
setcookie('test2' , '666' , time()+60 , '/');
第5个参数,不常用,cookie是不能跨域的,可以在不同的子域名中生效
大的网站,往往有很多子域名,如果让cookie 在不同的子域名中生效
book.163.com mil.163.com lady.163.com
指定到确定的位置去取出cookie
setcookie('test2' , '666' , time()+60 , '/' , '163.com');
1. 浏览器允许每个域名所包含的cookie数:
Microsoft指出InternetExplorer8增加cookie限制为每个域名50个,但IE7似乎也允许每个域名50个cookie。
Firefox每个域名cookie限制为50个。
Opera每个域名cookie限制为30个。
Safari/WebKit貌似没有cookie限制。但是如果cookie很多,则会使header大小超过服务器的处理的限制,会导致错误发生。
注:“每个域名cookie限制为20个”将不再正确!
2.当很多的cookie被设置,浏览器如何去响应。
除Safari(可以设置全部cookie,不管数量多少),有两个方法:
最少最近使用(leastrecentlyused(LRU))的方法:当Cookie已达到限额,自动踢除最老的Cookie,以使给最新的Cookie一些空间。Internet Explorer和Opera使用此方法。
Firefox很独特:虽然最后的设置的Cookie始终保留,但似乎随机决定哪些cookie被保留。似乎没有任何计划(建议:在Firefox中不要超过Cookie限制)。
3. 不同浏览器间cookie总大小也不同:
Firefox和Safari允许cookie多达4097个字节,包括名(name)、值(value)和等号。
Opera允许cookie多达4096个字节,包括:名(name)、值(value)和等号。
Internet Explorer允许cookie多达4095个字节,包括:名(name)、值(value)和等号。
注:多字节字符计算为两个字节。在所有浏览器中,任何cookie大小超过限制都被忽略,且永远不会被设置。
session
1.重要的信息放在哪里?
服务器端
2.浏览器拿箱子的号,是用什么记住这个号的,每次来访问服务器用什么带着这个号来的?
cookie
所以说,cookie和session是有联系的
3. 使用
//赋值和读取都需要session_start()
session_start();
$_SESSION['area'] = 'beijing';
注:
1.session无论是读取,修改,销毁( $_SESSION = array();session_destroy()) 都要先session_start();
2.session的读取,修改,销毁,可以直接操作$_SESSION数组
3. session的配置
session的存储路径
session.save_path = "c:/wamp/tmp"
是否使用cookie(来传递session_id)
; http://php.net/session.use-cookies
session.use_cookies = 1
; 是否强制只用cookie来传递session_id
; http://php.net/session.use-only-cookies
session.use_only_cookies = 1
; session_id的cookie名称
; http://php.net/session.name
session.name = PHPSESSID
; 是否自动session_start
; http://php.net/session.auto-start
session.auto_start = 0
; session_id的生命周期
; http://php.net/session.cookie-lifetime
session.cookie_lifetime = 0
; 传递session_id的cookie的有效路径.
; http://php.net/session.cookie-path
session.cookie_path = /
//根目录,跟cookie不同,session可以往上跳
; 是否通过URL传递session_id
; http://php.net/session.use-trans-sid
session.use_trans_sid = 0
; 过期session文件被清理的概率
; http://php.net/session.gc-divisor
session.gc_divisor = 1000
(以秒为单位,两个配合清除服务器上的过期session文件)
; 多少秒没更新的session文件,将被视为"可回收"
; http://php.net/session.gc-maxlifetime
session.gc_maxlifetime = 1440
session与cookie对比
特点 特点
特点 | cookie | sesion |
---|---|---|
存储地址 | 客户 | 服务器端 |
存储类型 | 字符串,数字 | 字符串,数字,数组,对象 |
创建方式 | setcookie | 直接操作$_SESSION |
读取 | $_COOKIE | $_SESSION |
销毁 | setcookie(key,'',0) | unset(),session_destroy() |