---恢复内容开始---php
自己web 与服务器的交互是经过HTTP协议来实现的,而HTTP协议又是无状态协议。就是说明HTTP协议没有一个內建机制来维护web与服务器之间的状态。因此同一个用户请求同一个页面两次的时候,HTTP协议不会认为这两次请求来自同一个web,会把这两次请求隔离开。会认为是两个不一样的用户来请求的。若是这个用户执行了登录操做,再次请求页面。HTTP协议不会认为该用户作过登录操做。由于HTTP协议没法保留登录状态,没法在不一样页面之间进行跟踪和状态保持。会话控制就是保留用户的状态,用来跟踪和对用户的状态保持。html
cookie是一种由服务器发给客户端的片断信息,存储在客户端浏览器的内存或者硬盘当中的技术。mysql
就是存储在浏览器当中的一个文件。web
cookie的优势和缺点redis
优势:cookie存储在客户端,不会占用服务器端的资源。sql
缺点:也是存储在客户端,不建议将一些敏感重要的数据保存到cookie当中。并且用户有权限在浏览器禁止cookie的使用,一旦用户禁止cookie没法保存用户信息。跨域
cookie的不可跨域名性浏览器
不可跨域名性是什么意思呢?目前不少网站都会使用cookie,好比客户端说访问A网站,A网站会给客户端颁发一个cookie。客户端访问B网站,B网站也会给客户端颁发一个cookie。那么客户端访问B网站会不会带着A网站的cookie?B网站可不能够修改A网站颁发给客户端的cookie呢?安全
答案确定是不能够的。cookie具备不可跨域名性,根据cookie的规范,客户端访问B网站只会携带B网站颁发的cookie,从而B网站只能操做B网站颁发的cookie,不能修改A网站的cookie。服务器
cookie是客户端浏览器来管理的,浏览器能保证B只操做B不会操做A,从而保证用户的隐私安全。
浏览器又是怎么管理的呢?
浏览器判断一个网站可否操做另外一个网站的cookie是根据域名,A网站和B网站的域名不一样,因此B不能修改A的cookie。
cookie的操做 存储cookie setcookie(name,value,expire,path,domain,secure) 参数 name 键名 value 存储的cookie值 expire cookie过时时间 path 规定的cookie服务器路径 domain 规定cookie的域名 secure 是否经过HTTP传输cookie 读取cookie $_COOKIE 删除cookie setcookie(name,'',time()-1000);
session是存在服务器的一种用来存放用户数据的类hashtable结构。
当浏览器向服务器发送第一次请求的时候。服务器会生成一个hashtable和一个sessionid,sessionid用来标识hashtable,服务器返回浏览器的时候会把sessionid一块儿返回。第二次浏览器请求的时候会携带第一次的sessionid,服务器根据sessionid来查找相匹配的hashtable.
session的优势和缺点
优势:安全性高 缺点:占用服务器资源。
推荐一个详解cookie和session的博客:http://www.javashuo.com/article/p-ryxhflmu-cq.html
使用session 首先开启session session_start() 操做session $_SESSION; 这里不详细介绍 能够参考百度 清除session $_SESSION = []; session_distory(); 删除session文件并把sessionid删除 session相关配置 session.auto_start session是否自动开启 session.cookie_domain session的有效域名 session.cookie_lifetime session存储在cookie的最大生命周期 session.cookie_path session存储在cookie的路径 session.name cookie存储sessionid的键名 session.save_path session存储在服务器的路径 session.use_cookies 是否使用cookie传递sessionid session.use_trans_id 是否可使用链接传递sessionid session垃圾回收机制 session.gc_probability 清理次数 session.gc_divisor 请求次数 session.gc_maxlifetime 最大生命周期 超过生命周期 视为垃圾 到达访问次数 就会清理一次垃圾 session.save_handle session存储方式 如:mysql redis memcache
一、cookie保存在客户端,服务器能够知道其中的信息。session存储在服务器端,客户端不知道其中的信息。
二、session保存的是对象,cookie保存的是字符串。
三、session不能区分路径,在同一个网站下在全部地方均可以访问到session,若是cookie设置了路径,那么同一个网站下不一样路径的cookie互相是不能访问的。
session是依赖于cookie才能正常工做,若是用户在客户端禁用了cookie那么session也将失效。
为何cookie禁用session也失效?
由于session在客户端也须要保存一个惟一标识(就是sessionid),那么就须要用到cookie,sessionid是存在cookie当中的,使用$_COOKIE['PHPSESSID']能够获取sessionid,因此禁掉cookie,session也不能使用。
禁用cookie后如何传递sessionid值?
一、能够修改配置
session.use_cookies = 0;设置客户端不用cookie保存sessionid值
session.use_only_cookies = 1; 是否只使用cookie传递sessionid
session.use_trans_sid = 1; url自动加上PHPSESSID 这样session正常使用
二、使用url传递sessionid
<a href="indx.php?<?php echo session_name(). '=' .session_id();?>"></a>
SID常量在禁用cookie的时候就是session_name和session_id的拼接,不然就是null
<a href="indx.php?<?php echo SID;?>"></a>