全面解读php-php会话控制技术

一、PHP会话控制技术

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

因为http协议是无状态协议,所以同一个用户在请求同一个页面两次的时候,http协议不会认为这两次请求都来自于同一个用户,会把它们当做是两次请求的独立,如果用户已经执行了登录操作,再次请求页面,http协议不会认为该用户已经做过登录,那么会话控制技术就是为了解决这个问题。

2、实现方式

  • 通过GET传参。
  • 通过cookie存储。
  • 通过session存储。

3、cookie

cookie是服务端发送给客户端的片段信息,存储在客户端浏览器的内存或者硬盘中的技术,可以把它当做浏览器中的一个小文件,这个小文件存存了客户端的一些信息

//设置cookie
setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] ) : bool
//删除cookie
setcookie($name,'', time()-1);

cookie的优缺点:

  • 优点:存储在客户端,不会占用服务器资源。
  • 缺点:不够安全,敏感信息不宜存入cookie,且用户可以设置禁用cookie
  • 如果 cookie被禁用了,可以通过url传递SessionID,服务器会通过这个SessionID来找到对应的session

4、SESSION

session_start() ; //开启session
$_SESSION[$key] = $val //设置session
session_destory() //销毁session

session的相关配置

//是否要自动开启session
session.auto_start

//存储SessionID的cookie的有效域
session.cookie_domain

//客户端的cookie存储SessionID的有效时间,默认值0表示直到浏览器关闭
session.cookie_lifetime

//客户端的cookie存储SessionID的路径
session.cookie_path

//cookie中SessionID的名称,默认值是PHPSESSID
session.name

//session文件在服务中的存储路径
session.save_path

//是否使用cookie来传递SessionID
session.use_cookies

//是否使用传递的方式(即url)来传递SessionID
session.use_trans_sid

垃圾回收机制相关
//gc_probability/gc_divisor定义会话启动时垃圾回收启动的概率,gc_probability默认值为1,gc_divisor默认值为100,1/100意味着每个请求中有1/100的概率启动gc进程
session.gc_probability

// 默认值为 100
session.gc_divisor

//指定过了多少秒后,session数据就会被定义为垃圾进行回收。
session.gc_maxlifetime

//session的存储句柄,默认是files,可以把它定义为把session存储到redis,mysql之类的地方。
session.save_handler

 session的优缺点

  • 优点:安全
  • 缺点:
  • 会占用服务器的资源
  • 分布式的时候,还是要借助redis之类来保持用户登录状态,否则多台服务器之间没办法共用session。

如何传递SessionID

<a href = "test.php?<?php echo session_name()  . '=' . session_id() "?><a href = "test.php?<?php echo SID "?>

SESSION的存储(分布式)

假设我现在有5台服务器,用户通过第一台登录后,并将session保存到了第一台服务器,这是跳转到下一个页面的时候,假如轮询到第四台服务器,这时在第四台服务器上就找不到这个SessionID所对应的文件了,因为session文件是在第一台服务器里面存储着的。

解决方法:

不要在用文件的方式来存储,改用内存服务器,如 redis 来进行存储,甚至使用 msql数据库直接存储也可以。

// 设置用户自定义会话存储函数
session_set_save_handler()

 本文为袋鼠学习中的总结,如有转载请注明出处:https://www.cnblogs.com/chrdai/p/11154583.html

原文地址:https://www.cnblogs.com/chrdai/p/11154583.html