setcookie('user','lisi'); echo 'OK';
if($_COOKIE['user'] == 'vip') { echo '尊敬的大客户!'; } else { echo '普通客户,爱买不买!'; }
一般情况打印出的结果是:普通客户,爱买不买
如果,把cookie值手动的在浏览器改为vip。结果就可想而知!那么如何规避这种情况呢?
先用session来处理
session_start(); // 开启session $_SESSION['user'] = 'liudehua'; echo 'OK';
session_start(); echo $_SESSION['user'];
怎么通过以上cookie凭证找到liudehua这几个字的?
打开php.ini找到:
http://php.net/session.save-path
session.save_path = "d:/wamp/tmp"
session详细语法学习
session_start(); $_SESSION['user']='zhaobenshan'; $_SESSION['school']='PKU'; $_SESSION['test'] = array('中','华','人'); class Dog { public $leg = 4; }
session_start(); class Dog { public $leg = 4; } print_r($_SESSION);
session_start(); /** unset($_SESSION['user']); $_SESSION['school'] = '牛筋大学'; **/ // ----------------销毁session, /* // 1:可以单独销毁某一个单元,即把$_SESSION数组某一个单元unset掉 unset($_SESSION['user']); */ /* // 2:可以整体把箱子给清空,即$_SESSION数组给清空 $_SESSION = array(); */ /* // 3:利用函数把箱子整体清空,效果同第2种办法 session_unset(); */ /* // 4:彻底把箱子给毁掉,即文件都没了 */ session_destroy();
探讨session的生命周期!
我们知道,一个session,有2方面的数据共同发挥作用
1:客户端的cookie
2:服务器端的session文件
要想让session失效,也是要从这2个角度来考虑
在php.ini里, 如下选项,控制sessionid的cookie的生命周期,秒为单位
session.cookie_lifetime = 15
注意:如果用户篡改了cookie,让cookie的生命周期为1年,那你也判断不出来.
如果想严格的让session就半小时有效,可以这样:
$_SESSION['time'] = 登陆时的时间戳
检验session的开启时间!
session的有效路径!
session的有效,取决于cookie,
cookie在哪儿有效,session自然就能读到
PHP如下选项,指定了sessionid这个cookie的有效路径是 / 路径,
自然session无论在多深的目录下设置,而session在整站都有效.
; The path for which the cookie is valid.
; http://php.net/session.cookie-path
session.cookie_path = /
cookie只能存储字符串/数字这样的标量数据
而session还可以存储数组/对象 (除了资源型,其他7种都可以)
请注意:如果你把对象存储到session里,
那么另一个读取session的页面,也必须有此对象对应的类声明才合理.
否则,从session里分析出一个对象,却没有与之对应的类,则会提示:
__PHP_Incomplete_Class Object
从http协议的角度看
cookie信息是放在头信息里传输的,
自然,使用cookie之前,不能有任何主体信息的输出,空白也不行
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent
如果你仔细检测,没有空白,请检查BOM信息
