会话控制技术session 和cookie
HTTP是无状态协议,没有内建机制维护两个事物之间的状态,同一个用户在请求同一个页面两次的时候,HTTP协议不会认为这两次请求都认为是同一用户的请求,会当做两次请求的独立。会把两次请求隔离开,会认为两次请求是不同的两个人进行请求或访问。如果用户进行了登录操作,再次请求页面,HTTP协议不会认为该用户之前进行过登录,没有办法保持之前的用户登录状态,所以不能再不同页面之间进行用户登录操作的跟踪状态和会话的保持。
会话控制就是为了解决跟踪同一用户的状态。允许服务器跟踪同一客户端做出的连续请求。保持用户的状态,从而保持用户的登录状态。
GET参数进行传递 信息不安全,参数丢失
cookie 是一种由服务器发送给客户端的片段信息,存储在客户端浏览器的内存或硬盘当中的技术。
setcookie(key,value,expire,path,domain,sercure);
$_COOKIE 读取数据
setcookie('a[b]','val');
setcookie('a[b]','',time()-1000);
cookie优点 存储在客户端,不会占用服务器的资源。效率高。 缺点:存储在客户端不安全,不建议将一些敏感、重要的信息存储在客户端,用户禁止cookie 将不能存储cookie值。
session 将用户的信息存储在服务器中,用户不能禁用session的使用。基于cookie的存储,session_id 存储在cookie中。cookie被禁用可以用URL参数进行传递,保存session的状态。
用户读取session ,会将cookie中存储的session_id,在服务器中找到对应的session文件,然后读取数据。
session_start();
$_SESSION;
$_SESSION = []; 删除session数据
session_destroy();删除session文件
session.auto_start 是否自动开始session
session.cookie_domain 存储session的cookie的有效域名
session.cookie_lifetime
session.cookie_path
session.name 默认PHPSESSION
session.save_path 存储路径
session.use_cookies 是否用cookie存储session_id
session.use_trans_sid 是否用传递的方式传递session_id
session.save_handler 句柄
session.gc_probability =1 垃圾回收机制
session.gz_divisor =100
session.gc_maxlifetime =1440 最大生命周期S
每100次会清理1次 超过1440秒
session 安全,存储在服务器端 占用资源
session_name session_id SID常量
session_set_save_handler() 存储方式的改变 可以存储在mysql redis memcache 中