http原理
1.php
$user = 'admin'; echo $user;
2.php
//如何在这个页面 获取1.php的$user的值 echo $user;
知道: 无论是什么变量,在php中是无法跨越到另一个页面的
那如何像会员登录一样,每个页面都可以获取这个变量
需要⽤cookie
cookie是浏览器在和它配合,共同达到这样一个效果
http原理的⻆度来说:
浏览器敲回车,访问一个页面,这是个请求,且会带着一些我们无法直观的东西去请求
网卡沿着网线连接到服务器的⽹卡上,打开了它的80端口,双方建立了一个这样的连接,就像个通
道一样
apache ---> 开始相应,响应你登陆成功,同时会响应给我们一些眼睛无法直观看到的东西,暗号,把
admin这个
暗号给了我们的浏览器,浏览器拿到这个暗号,会将它存起来
请求--->相应,这次请求彻底结束,他俩的连接网卡就这样断开了,不再有任何关系 下次,浏览器再
去请求其他的页面。
此时,浏览器会带着暗号,admin过去连接apache
如何给浏览器一个暗号?
用firebug 查看1.php的网络(响应头信息,请求头信息)和cookies
2.php是易个空白的页面,同样用firebug查看网络和cookie 对比两个php页面的 -> 请求头信息
发现在2.php 里的请求头信息是带着 1.php的 cookie去请求的
就像吃饭时凭票取饭是一样的 那如何在2.php 取出它的cookie值?
php会捕捉到你带过来的cookie值,把它放在一个cookie数组里 $_COOKIE 它是以个超全局变量,可以
直接使用
2.php
1 print_r($_COOKIE);
php变量是没法跨页面的,之所以我们能达到这个效果,是因为浏览器每次都会在请求头信息中将这
个变量带过来。
cookie 语法
1.php
1 setcookie('sec' , '!!!' , time()+10);
2.php
print_r($_COOKIE);
如果不加第3个参数,那么它的有效期是多久 1.php
1 setcookie('sec' , '!!!' , time()+60); 2 setcookie('test' , '888' );
关闭浏览器,查看2.php的效果 如果不加第3个参数,表示关闭浏览器就失效 setcookie的第4个参数,代表
cookie的有效路径
上层目录新建 test.php 放在1.php的上级,看能不能打印出值
1 print_r($_COOKIE);
cookie默认是在当前目录下有效,如果是这样,⼤型的⽹站⽆法做到全站登录 cookie,可以往下级目录识
别,往上级目录跳没办法
1.php
setcookie('sec' , '!!!' , time()+60); setcookie('test' , '888' ); 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');
如何删除或者清空cookie?
注意:无论是设置,修改,销毁cookie,都需要用到setcookie
setcookie('name' , null , 0);
session原理
cookie -> 服务器给浏览器的一个小票, 存储在浏览器中 那session是什么?
人去超市 -> 客户
超市的储物箱 -> 给人提供服务[存储物品给客户一个小票]
人拿箱子提供的小票 -> 取出箱子内的物品
在这个过程中
1.重要的信息放在哪里?
服务器端
2.浏览器拿箱⼦的号,是⽤什么记住这个号的,每次来访问服务器⽤什么带着这个号来的?
cookie
所以说,cookie和session是有联系的
session语法
1.php 无论是设置,读取,销毁session,需要先开启session
session_start();
开启session之后,可以直接写session变量
1 session_start(); 2 $_SESSION['area'] = 'beijing';
1.php
1 session_start(); 2 print_r($_SESSION);
清除所有cookie -> 运行1.php -> 查看wamp/tmp和firebug下的cookie
1.php firebug下的cookies -> 多了一个cookie 名称是PHPSESSID 内容是一串字符串
这以长串内容就是箱子号
箱子里的内容真的存储起来了吗
客户 -> 浏览器 超市 -> 服务器
小票上的号 -> cookie的内容 箱子 -> wamp/tmp 下的⽂件 箱⼦⾥的东⻄ -> wamp/tmp/ 下对应文件
的内容 $_SESSION
为什么箱子的号是一串乱码? 它必须是一串乱码,因为cookie的名称是PHPSESSID,它的内容(箱子号) 如
果再不乱的话,是非常容易伪造的.
session语法细节
1.session无论是读取,修改,销毁 都要先session_start();
2.session的读取,修改,销毁,可以直接操作$_SESSION数组
3.session销毁
1)$_SESSION = array(); 2)session_destroy();
销毁更彻底,彻底删除session文件
在php.ini搜索"session",可找到相关配置项 session的存储路
session.save_path = "c:/wamp/tmp"
是否使用cookie(来传递session_id)
1 session.use_cookies = 1
session_id的cookie名称
1 http://php.net/session.nam 2 session.name = PHPSESSID
是否自动session_start
1 ;http://php.net/session.auto-start 2 session.auto_start = 0
session_id的生命周期
1 ;http://php.net/session.cookie-lifetime 2 session.cookie_lifetime = 0
结束会话,关闭浏览器就结束,设置以后单位为秒
传递session_id的cookie的有效路径.
; http://php.net/session.cookie-path session.cookie_path = /
cookie与session的比较