会话技术整理

Cookie基本使用(增删改查)

创建cookie(增加)

setcookie();setcookie7个参数:

参数1:保存的cookie变量名称

参数2:变量对应的值

参数3cookie文件的有效期

参数4:有效路径

 

参数5:有效域名(cookie不支持跨域使用,可以通过参数5指定cookie在哪个域名下起作用)

 

参数6:是否只允许在https协议下使用。如果设置为true,就表示该cookie只能在https协议下进行传输

 

参数7:为了防止cookie被劫持定义的参数,只允许在http协议下传输(在web服务器下进行传输)。如果设置为false,允许该cookie在任何协议下都能传输

 

读取cookie(查询)

$_COOKIE['age'];

修改cookie

如果给同一个cookie变量重新赋值,就是修改的意思,而且cookie的有效期会从修改的时间重新计算。

 

删除cookie

 

cookie的有效期设置为过期

细节:

setcookie前面不能有任何输出,echo var_dump()

因为setcookie是服务器告诉浏览器的,告诉浏览器在自己身上创建cookie文件,服务器向浏览器回应信息是通过header头信息回应的

 

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

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/lxj0205/p/9549405.html