PHP中的会话管理

PHP中的会话控制 COOKIE

  1. httP特点:无连接无状态
  2. Cookie: 保存在客户端中的

内存cookie---有浏览器来维护,保存在内存中,浏览器关闭后就消失 ,存在时间是有限的

硬盘cookie()保存在硬盘中,有一个过期时间,也可以手动清除浏览器数据,否则营办cookie不会被删除,存在时间是长期的

Cookie使用场景一般在服务器端设置 可以用在永久登陆、购物车

操作cookie 设置、读取、更新、删除cookie

  1. 设置cookie  setcookie()/setrawcookie()

bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = ""[, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] )

$name设置cookie名称

$value 设置cookie值 默认为空

$expire 设置cookie过期时间 默认为0s 

$path       设置cookie有效路径,默认为当前目录及其子目录,也可以指定为根目录及其子目录

$domin    设置cookie的作用域 默认为本域

$secure 设置cookie只能通过HTTPs传输 默认为false

$httponly        是否只是用http访问cookie 默认为false 如果设置为true,那么客户端就无法使用js操作cookie ,可以减少Xss攻击

  1. 读取Cookie     

$_Cookie

  1. setrawcookie 用法和setcookie一样 但是不会对发送的值做urlencode编码 主要是针对加号和空格的编码
  2. 更新cookie 重新写一个setcookie 但是要保证修改前后的$path和$domian保持一致 否则会变为添加一个新cookie
  3. 删除cookie 只要让cookie过期就可以 但是和更新cookie一样需要保证$path和$domain 一致
  4. 通过header方法来设置cookie

Header(“Set-Cookie:name=value[;expires=date][;path=path][;domain=domain][;secure][;httponly]”)

Expires:gmdate(“D,d M Y H:i:s”,time()+3600);

Strtotime(‘+7 days’) 把字符转为UNIX时间戳

  1. cookie中存数组

Setcookie(‘userinfo[username]’,’111’,strtotime(‘+1 hour’));

Setcookie(‘userinfo[pwd]’,’222’.strtotime(‘+1 hour’));

  1. 通过js可以操作cookie
  2. Explode字符数组使用一个字符分割一个数组

Implode(‘字符,数组)将一个一维数组转换为字符串

  1. json_encode()对变量进行 JSON 编码

Json_decode()对 JSON 格式的字符串进行解码

 

  1. cookie的缺陷:
  1. cookie是明文操作。不是很安全。
  2. 截取cookie可以用来cookie欺骗
  3. 不要把cookie当作客户端存储容器来操作,每个域名允许的cookie是有限制的,每个浏览器限制不同。Cookie最大字节数是4K
  4. Cookie设置后每次请求都会附着再http的头中,浪费带宽
  5. 可以用HTML5的localStorage本地存储来解决

 

 

  1. localStorage的基础用法
  1. localStorage.setItem($name,$value)//设置
  2. localStorage.getItme($name)//获取
  3. LocalStorage.removeImte($name)//移除
  4. LocalStorage.clear()//清除全部

 

PHP中的会话控制 session

  1. 什么是session:持续性的双向的连接

服务器和浏览器保有的共同的密码的时间

 

  1. 准备建立对话的时候PHP会先查看请求中是否包含session_id,如果没有服务器会在自己的内存里新建一个变量,这个变量就是session_id,列如session_1
  2. 服务器会把session_id发送到客户端浏览器保存,一般浏览器会把找个id存在cookie中
  3. 之后每次浏览器再去访问服务器是都会携带cookie中存储的session_id,这样这个服务器就认识这个浏览器了
  4. 服务器中的这个session_id变量就可以存放任何会话数据,这些数据是经过序列化处理后存放进去的
  5. 每次浏览器访问服务器都可以评价自己的session_id到服务器中认领自己的数据
  6. 如果想要销会话,可以删除会话中的数据,销毁会话文件

 

  1. PHP中如何使用session会话
  1. 开启session ---- session_start()

可以通过$_SESSION来设置相关值,设置和读取都是用这个全局变量

  1. 销毁session------session_destory()来销毁
  2. Session_name()获取session名称

Session_id()获取session_id

  1. session有生命周期

setcookie(session_name(),session_id(),time()+3600);

  1. session可以保存数组 直接把数组赋值给$_session
  2. Cookie禁用后session还能用嘛?答:可以,不过要用url方式传递session_name/session_id    然后用session_id($_GET[session_name])来绑定session名和id 就可以正常使用session
  1. 彻底销毁session会话
  1. $_SESSION清空 

$_SESSION=[]

  1. cookie中的数据清空   setcookie cookie过期就可以

If(ini_get(‘session.use_cookies’)){ //判断session是否使用cookie传递的

$params=Session_get_cookie_Params();//获取设置cookie另外选项的一些数组

Setcookie(session_name(),session_id(),time()-1.$params[‘path’].$parms[‘domain’],$params[‘secure’],$params[‘httponly’])

}

//获取的path为根目录下的会话路径

  1. 销毁session

 session_destory()

/**

*销毁对话

*/

$_SESSION="";

session_destroy();

 

  1. 自定义形式存储session----自定义session管理器

最好存在redis内存管理器中

Ini_get()得到php ini配置中的某些数据

Ini_set() 修改php ini 配置中的某些数据

session_set_save_handler ( SessionHandlerInterface $sessionhandler [, bool $register_shutdown = true ] ) 设置自定义会话存储函数,可以将session信息存储到数据库中,但是这样需要在session之前加一台或者多台缓存服务器

使用自定义session管理器需要自己写完Session_set_save_handler 提供的接口,并且在使用前需要将ini配置中的session.save_handler设置为user--------ini_set(‘session.save_handler’,user)

 

require_once '实现的接口类';

$obj=new 自定义类;

ini_set('session.save_handler', 'user');

session_set_save_handler($obj,true);

session_start();

//下面写session操作

 

 

猜你喜欢

转载自blog.csdn.net/qq_36558538/article/details/81589042