• Session基础与编程


    Session:用于表示特定Web浏览器和服务器之间的一系列的HTTP请求和响应

    HTTP不支持session的概念,但是PHP\SAP.NET和多数Web语言都支持session


    cookie和Session的区别:

    • cookie是存储在客户端的数据
    • Session的数据是存储在服务器中(每个客户端仅有一个Session)
    • 生存期:会话(Session)在用户注销或关闭浏览器之前可以一直存在;cookies也可以生存这么长,直到给定固定的超时时间(持久性)
    • 数据存储位置:Session数据存储在服务器上(但是Session ID存储在cookies中);cookies将数据存储在用户的浏览器中
    • 安全性:Session很难被恶意用户篡改或者删除(需要进行Session ID验证),但是cookie很容易
    • 隐私:Session保护私人隐私信息不被计算机的其他用户看到;但是cookies不可以

     Session通常建立在cookie之上: 

    客户端存储的唯一数据是持有唯一Session ID 的cookie(Session ID 的存储形式是cookie)

    在每个页面请求中。客户端发送其session ID cookie,服务器使用此来查找和检索客户端的会话


    Session是如何建立的

    • 客户端浏览器向服务器发送初始请求
    • 服务器标注客户端的IP地址和浏览器,存储 一些局部Session数据,并发送一个Session ID给客户端(作为cookies)
    • 在后面的请求中,客户端向服务器发回相同的Session ID(Cookies)
    • 服务器稍后使用Session ID Cookies为客户端Session 检索数据

     PHP中Session——的建立

            session_start();

    session_start表示脚本需要与用户进行会话

    调用的规则:

    • 必须在脚本顶部调用,在生成任何HTML输出之前
    • 如果服务器以前未见过此用户,则创建一个新会话
    • 否则,现有的session数据被加载到$_SESSION关联数组中
    • 可以将数据存储在$_SESSION关联数组中,便于之后在页面上检索它

    PHP中的 session函数

    session_destroy()——删除和当前session有关的所有数据

    • session_destroy结束当前的session 
    • 潜在问题:如果稍后再次调用session_start,它有时候会重用以前使用的session ID/数据
    • 如果想稍后启动一个全新的会话最好,刷新旧会话
      1. session_destroy();
      2. session_regenerate_id(TRUE);#刷新id号
      3. session_start();
      4. ?>

    session_id()——返回当前session的ID号


    session_regenerate_id()                session_regenerate_id(boolean)

    ——使用新ID替换当前的session ID;如果传递参数TRUE,也可以擦除与session关联的任何数据


    session_save_path()                session_save_path("directory")

    ——获取/设置存储在服务器上的session数据的文件夹名称(也可以在php.ini文件中设置)


    session_start()——为当前客户端启动新的session;如果session已经在进行中,则无需处理

    • session_start不只是开始一个会话,它为当前用户重新加载任何现有会话。因此必须在使用session数据的每个页面中调用它        
      1. print $_SESSION["name"];#undefined
      2. session_start();#重新加载现有会话
      3. print $_SESSION["name"];//
      4. ?>
    • 除非销毁他们并重新生成用户的session ID,否则之前的session将被保留
      1. session_destroy();
      2. session_regenerate_id(TRUE);
      3. session_start();
      4. ?>

    session_status()——返回当前服务器上启用或禁用session支持的信息
    session_unset()——释放当前注册的所有session变量


    PHP中存取session数据

    模板(先存 然后读 检查 释放 )

    $_SESSION联合数组读取/存储所有session数据

    使用isset函数查看给定的值是否在session

    1. $_SESSION["name"]=value;//存取session数据
    2. $variable=$_SESSION["name"];//读取session数据
    3. if(isset($_SESSION["name"])){...}//检查session数据
    4. unset($_SESSION["name"]) ; //删除session数据
    5. ?>

    示例

    1. if(isset($_SESSION["point"])){
    2. $point=$_SESSION["point"];//读取session数据
    3. print("you've earned $point points")
    4. }else{//检查session数据
    5. $_SESSION["point"]=0;//存取session数据
    6. }
    7. ?>

    session超时

    • 一般:客户端关闭浏览器,删除session cookie
    • 或者可以设置:服务器在一定时间后自动清理旧session

                    可以在PHP服务器中设置session_cache_expire函数进行调整

                    也可通过session_destroy显示删除会话

  • 相关阅读:
    [LeetCode周赛复盘] 第 115 场双周赛20231014
    Java面向对象程序设计综合练习4(编程题)
    修改CUDA和GCC软件接版本
    LayaBox---TypeScript---高级类型
    jsp 新能源汽车论坛网Myeclipse开发mysql数据库web结构java编程计算机网页项目
    java计算机毕业设计springboot+vue南天在线求助系统
    企业能源管控平台在工业能效提升行动中的作用
    参考线平滑-FemPosDeviation-SQP
    【课上笔记】第八章 图
    【Starrocks docker-compose部署】
  • 原文地址:https://blog.csdn.net/weixin_47295886/article/details/126423829