PHP会话控制考察点

为什么要使用会话控制技术

HTTP协议是无状态的,也就是说HTTP没有一个内建的机制来维护两个事务之间的状态。当一个用户完成一个请求发起第二个请求的时候,服务器无法知道这次请求是来自于上一次的客户。而用户登录、购物车等,这些是需要服务器能够保存用户的状态的。会话技术就是用来完成这件事的。其思想是允许服务器跟踪客户端做出的连续请求。

会话控制技术的实现方式

通过GET参数传递

在get里面把状态传递到下一页

使用get参数传递不安全而且不稳定,不建议使用

Cookie本质上是服务器发送给客户端的片段信息,存储在客户端浏览器的内存或者是硬盘中的技术。

  • Cookie的写入操作
    setcookie($name,$value,$expire,$path,$domain,$secure)
  • 读取Cookie
    $_COOKIE数组
  • 删除Cookie
    删除cookie不能使用unset,因为$_COOKIE是只读的。要想删除,只需要让其过期就就行:
    setcookie($name,'',time()-1000)
  • Cookie的优缺点
    • 优点:存储在客户端,不会占用服务器的资源
    • 缺点:信息保存在客户端,安全性得不到保障,而且用户可以关闭cookie。

Session

Session将数据保存在服务器上,相比cookie更加安全。
session并不是完全脱离cookie,他是基于cookie的(需要将sessionid保存在客户端,如果cookie被禁用,可以通过url来传递sessionid)

  • session 的操作

    1. session_start();//要使用之前一定要开启
    2. 然后直接操作$_SESSION数组
    3. 要删除,直接赋空数组:$_SESSION = [];
    4. 如果想删除文件,则使用session_destroy();//同时会删除对应session的cookie
  • session 配置(php.ini)

    1. session.auto_start
    2. session.cookie_domain
    3. session.cookie_lifetime
    4. session.cookie_path
    5. session.name
    6. session.save_path
    7. session.use_cookies
    8. session.use_trans_sid
    9. session.gc_probability
    10. session.gc_divisor
    11. session.gc_maxlifetime
    12. session.save_handler
  • session的优缺点

    • 优点:信息安全
    • 缺点:占用服务器的资源,分布式不方便
  • 传递sessionid
    如果cookie被禁用,那么可以通过get来传递sessionid:


"xxx.php?<?php echo session_name().'='.session_id();  ?>"//通过session_name()和session_id()来拼接

"xxx.php?<?php echo SID; ?>"//SID常量在cookie开启的时候为空,在cookie被禁用的时候是session_name()和session_id()拼接的样子

  • session 的存储

session_set_save_handler()函数可以将session存储在服务器上(mysql Memcache redis等)

原文地址:https://www.cnblogs.com/clannadxr/p/7723309.html