PHP面试 PHP基础知识 八(会话控制)

---恢复内容开始---php

PHP会话控制技术

  首先了解一下为何要使用会话控制技术?

  自己web 与服务器的交互是经过HTTP协议来实现的,而HTTP协议又是无状态协议。就是说明HTTP协议没有一个內建机制来维护web与服务器之间的状态。因此同一个用户请求同一个页面两次的时候,HTTP协议不会认为这两次请求来自同一个web,会把这两次请求隔离开。会认为是两个不一样的用户来请求的。若是这个用户执行了登录操做,再次请求页面。HTTP协议不会认为该用户作过登录操做。由于HTTP协议没法保留登录状态,没法在不一样页面之间进行跟踪和状态保持。会话控制就是保留用户的状态,用来跟踪和对用户的状态保持。html

  cookie和session

  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的区别

  一、cookie保存在客户端,服务器能够知道其中的信息。session存储在服务器端,客户端不知道其中的信息。

  二、session保存的是对象,cookie保存的是字符串。

  三、session不能区分路径,在同一个网站下在全部地方均可以访问到session,若是cookie设置了路径,那么同一个网站下不一样路径的cookie互相是不能访问的。

  cookie与session的联系

  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>

相关文章
相关标签/搜索