zoukankan      html  css  js  c++  java
  • 全面解读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

  • 相关阅读:
    yolo_to_onnx ValueError: need more tan 1 value to unpack
    yolo_to_onnx killed
    C++ 实现二维矩阵的加减乘等运算
    Leetcode 1013. Partition Array Into Three Parts With Equal Sum
    Leetcode 1014. Best Sightseeing Pair
    Leetcode 121. Best Time to Buy and Sell Stock
    Leetcode 219. Contains Duplicate II
    Leetcode 890. Find and Replace Pattern
    Leetcode 965. Univalued Binary Tree
    Leetcode 700. Search in a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/chrdai/p/11154583.html
Copyright © 2011-2022 走看看