这个太过抽象,也挺复杂的,只能说一下本身的理解。在b/s架构下,会话机制,其实就是服务器(server)和浏览器(browser)之间的对话的一种方式!这种对话方式,可以使得web站点可以对用户的行为进行追踪,在同一个站点下用户所需的数据实现共享!php
归根究竟是因为,b/s的访问方式是基于http协议的,而http协议自己又是无状态的,所谓无状态,就是指服务器端没法区分发起请求的是不是同一我的(有兴趣的同窗能够本身好好研究一下http的无状态性)!每次请求都会被当作独立的请求,并不能将两次访问联系到一块儿!html
核心设计思想:容许服务器对同一个客户端的的连续请求进行跟踪,对同一个访问者的请求数据,在多个页面之间实现共享!jquery
1)在两个页面(较少页面之间)经过$_GET或者$_POST数组之间实现数据的共享!
2)使用cookie将用户的信息存放在客户端的计算机中,用于保存并不重要的数据
3)经过session将用户的信息保存在服务器中web
经过$_GET和$_POST方式得到数据较为简单,这里就再也不介绍!跨域
1)当咱们经过setCookie()函数来新增或者改变cookie中的值的时候,setCookie()函数前面不可以有任何实际的输出,即便是空格也不能够!
这是由于setCookie()函数最终是改变http响应头信息(咱们有理由相信setCookie()方法,底层就是经过header()方法进行的设置的头信息),咱们都应该知道在header函数前面是不可以有任何实际的输出的(除非是开启了ob缓存)!数组
2)在cookie中是只可以保存字符串的,可是,若是咱们想将一个数组变量保存到cookie中,在不进行序列化的状况下,其实也是能够办到的,代码以下:浏览器
<?php $expires = time()+3600; setcookie('user["name"]["xing"]','liang'); setcookie('user["name"]["ming"]', 'bo'); setcookie('user["age"]', '23', $expires); setcookie('user["addr"]','吉林', $expires); ?> <?php $name = $_COOKIE['name']; var_dump($name); ?> > 获得的结果以下: > array(3) { > [""name""]=> > array(2) { > [""xing""]=> > string(5) "liang" > [""ming""]=> > string(2) "bo" > } > [""age""]=> > string(2) "23" > [""addr""]=> > string(6) "吉林" > }
3)cookie的$path参数,只有在指定的路径下的网页才能够获取cookie中的值!demo以下:缓存
<?php if(!$_COOKIE['name']) { $expires = time()+3600; setcookie('name','liangbo', $expires, '/talkphp/secondtalk/'); } ?>
该页面所处的路径"/",也就是网站的根目录!服务器
接受的代码以下:cookie
<?php header('Content-type:text/html;charset=utf-8'); $name = $_COOKIE['user']; var_dump($name); ?>
改代码文件所在的路径以下:/talkphp/secondtalk/
执行结果以下:string(7) "liangbo"
一样的接受代码:可是所处的路径不一样,是在根目录“/”下,
获得的结果以下:null
4)cookie的跨域问题:
我的认为跨域问题,主要是值存在同一个网站下,有多个二级域名,在多个二级域名下cookie数据的共享问题!
在cookie中,若是设置的domain参数是一级域名的话,那么cookie中的数据在各个二级域名之间是均可用的!demo以下:
<?php if(!$_COOKIE['name']) { $expires = time()+3600; setcookie('name','liangbo', $expires, '/talkphp/secondtalk/', '.test.com'); } ?>
<?php $name = $_COOKIE['name']; var_dump($name); ?>
该代码所在的网站域名是:php.test.com 页面路径是:/talkphp/secondtalk/getcookie.php
运行结果以下:string(7) "liangbo"
一样的代码,该代码所在的域名是:jquery.test.com 页面所在的路径是:/talkphp/secondtalk/getcookie.php
运行结果以下:string(7) "liangbo"
可见,若是domain参数中设置的是一级域名的话,那么在各个二级域名之间$_COOKIE中的数据是能够共享的
在一级域名中.test.com,中test前的"."实际上是能够省略的,可是加上的话,浏览器的兼容会更好!
咱们来看另一种状况:
<?php if(!$_COOKIE['name']) { $expires = time()+3600; setcookie('name','liangbo', $expires, '/talkphp/secondtalk/','php.test.com'); } ?>
这里,咱们将domain设置为了二级域名php.test.com
<?php $name = $_COOKIE['name']; var_dump($name); ?>
该代码所在的网站域名是:php.test.com 页面路径是:/talkphp/secondtalk/getcookie.php
运行结果以下:string(7) "liangbo"
一样的代码,该代码所在的域名是:jquery.test.com 页面所在的路径是:/talkphp/secondtalk/getcookie.php
运行的结果以下:null
可见,若是设置的domain参数是二级域名的话,那么cookie中的数据只可以在该二级域名下面使用!