当前位置: 首页 > news >正文

全栈:session用户会话信息,用户浏览记录实例

PHP中的session是一种存储机制,它允许您存储和跟踪用户在访问Web应用程序时的信息。会话通常用于存储用户特定的数据,如用户ID、购物车内容、用户偏好设置等,这些数据需要在多个页面请求之间保持不变。

session详解

1. 会话是如何工作的

会话通过唯一的会话ID来标识每个用户。这个会话ID可以存储在多种地方:

  • 默认情况下,它存储在cookie中。
  • 也可以存储在服务器的端或URL中。

当用户与Web应用程序交互时,服务器使用这个会话ID来检索和更新存储在服务器端的会话数据。

2. 开启会话

要使用会话,必须首先调用session_start()函数。这个函数初始化会话注册过程,创建会话ID,并存储在cookie中。

session_start();

3. 使用$_SESSION超全局变量

$_SESSION是一个超全局变量,它包含了会话存储的数据。可以通过它来设置、读取或删除会话变量。

// 设置会话变量
$_SESSION['username'] = 'JohnDoe';

// 读取会话变量
echo $_SESSION['username'];

// 删除会话变量
unset($_SESSION['username']);

4.会话配置

在调用session_start()之前,可以使用各种函数来配置会话,例如:

  • session_name():设置会话名称,这是会话ID存储在cookie中的名称。
  • session_module_name():指定使用的会话模块。
  • session_save_path():设置会话数据的保存路径。

5. 会话ID管理

  • 可以通过session_id()获取当前会话ID。
  • 使用session_regenerate_id()可以重新生成一个新的会话ID。

6. 会话结束

当用户完成与Web应用程序的交互时,可能希望结束会话。这可以通过调用session_destroy()函数实现,它将销毁所有的会话数据。

session_destroy();

实例代码内函数简介

 

  1. session_start(): 启动一个新的或恢复一个现有的会话,是使用会话变量的前提。

  2. $_SESSION: 超全局数组,用于存储用户会话数据。如$_SESSION['username']用于存储用户名。

  3. empty(): 检查一个变量是否为空。如果变量未设置,或者其值等同于FALSE,则返回TRUE

  4. isset(): 判断变量是否已经设置且不为NULL。变量存在且有值的情况下返回true,反之(空值,null)为false

  5. basename(__FILE__): 返回路径中的文件名部分,__FILE__是一个魔术常量,代表当前脚本的完整路径和文件名。

  6. array_unshift(): 在数组的开头插入一个或多个元素。

  7. foreach: 遍历数组的每个元素,并执行代码块。

  8. header(): 发送原生的HTTP头信息。常用于重定向(header("Location: ..."))、设置内容类型(header("Content-Type: ..."))等。

用户浏览记录实例

1.编写前端html代码,用于post传递用户名等信息

html源码:08.html

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

</head>

<body>

    <form action="09.php" method="post">

        name:<input type="text" name="uname">

        password: <input type="password" name="passwd">

        <input type="submit" value="log in">

    </form>

</body>

</html>

  • <form> 标签定义了一个表单,用户可以在这个表单中输入数据。action="09.php" 指定了当用户提交表单时,表单数据将被发送到服务器上的 "09.php" 文件进行处理。method="post" 指定了数据发送的方式为POST方法,这通常用于提交敏感信息,如密码,因为它不会在URL中显示数据。

  • name:<input type="text" name="uname"> 创建了一个文本输入框,用户可以在此输入用户名。name="uname" 定义了输入框的名称,这个名称在后端处理表单数据时用来识别这个字段的值。

  • password: <input type="password" name="passwd"> 类似地,创建了一个密码输入框,用户输入的内容会被隐藏显示为星号或圆点,以保护密码不被旁人窥视。name="passwd" 是该输入框的名称,同样用于后端数据处理。

  • <input type="submit" value="log in"> 创建了一个提交按钮,用户点击此按钮后,表单数据就会被提交。value="log in" 定义了按钮上显示的文字为 "log in"。

2.后端编写用户名,密码登录验证

php源码:09.php

<?php

    session_start();

   

    if(!(empty($_POST['uname']) && empty($_POST['passwd']))){

 

        if($_POST['uname'] == "zhangsan" && $_POST['passwd'] == 123456){

           

            $_SESSION['username'] = $_POST['uname'];

 

            if (!(isset($_SESSION['history']))){

                $_SESSION['history'] = [];

                array_unshift($_SESSION['history'],basename(__FILE__));

            }

           

            echo '<a href="06.php" target="_blank" >access:log in</a>';

            //var_dump($_SESSION);

 

        }else{

            echo '<script>alert("Invalid username or password")</script>';

        }

 

    }else{

        echo '<script>alert("The user name and password are empty")</script>';

    }

 

?>

  • session_start(); 启动了会话管理,允许在多个页面间传递数据,比如用户的登录状态。

  • if(!(empty($_POST['uname']) && empty($_POST['passwd']))){} 检查是否同时提交了用户名(uname)和密码(passwd),如果两者都不为空,则继续执行内部代码。

  • 接下来的条件 if($_POST['uname'] == "zhangsan" && $_POST['passwd'] == 123456){} 验证用户输入的用户名和密码是否与预设的凭证匹配(这里仅为示例,实际应用中不应硬编码凭证)。如果是,执行以下操作:

    • $_SESSION['username'] = $_POST['uname']; 将用户名存储在会话变量中,表示用户已成功登录。

    • 代码检查是否存在一个名为'history'的会话变量。如果不存在,初始化为空数组,并将当前脚本文件名(通过basename(__FILE__)获得)添加到数组的开头作为用户登录的历史记录。

  • 如果登录成功,页面会显示一个链接指向"06.php"页面,用户可以点击访问。否则,通过JavaScript弹出警告提示用户“Invalid username or password”。

  • 如果用户名或密码任一为空,将弹出警告提示“用户名和密码为空”。

3.编写主页,用于跳转至其他界面

php源码:06.php

<?php    

    header("content-type:text/html;charset=utf8");

    session_start();

    if(!(empty($_SESSION['username']))){

        echo '欢迎用户:' . $_SESSION['username'];

        array_unshift($_SESSION['history'],basename(__FILE__));

    }else{

        echo "<script >";

        echo "alert('未登录,即将重定向');";

        echo "window.location.href='08.html';";

        echo "</script>";

       

    }

    // echo '<a href="10.php">点击清除登录信息</a>';

    echo'<form action="10.php" method="get">';

    echo'<button type="submit">点击清除登录信息</button>';

    echo'</form>';

 

    echo'<form action="11.php" method="get">';

    echo'<button type="submit">浏览历史</button>';

    echo'</form>';

    //var_dump ($_SESSION);

   

?>

  • header("content-type:text/html;charset=utf8"); 设置响应内容类型为HTML,并指定字符集为UTF-8,确保中文等多字节字符能够正确显示。

  • session_start(); 启动会话,这是处理会话数据前的必要步骤。

  • if(!(empty($_SESSION['username']))){} 检查会话中是否存在名为username的变量,即判断用户是否已经登录。如果用户已登录:

    • 输出欢迎信息,包含用户名。
    • 更新用户的历史记录(访问过的页面列表),将当前脚本文件名(通过basename(__FILE__)获取)添加到历史记录数组的最前面。
  • 如果用户未登录,则通过JavaScript弹出警告框提示“未登录,即将重定向”,并重定向到"08.html",这是一个通常用于登录页面的重定向操作。

  • 提供了两个按钮形式的表单,分别用于:

    • 清除登录信息,通过GET请求发送到"10.php"。这通常是一个登出功能,用于销毁会话数据。
    • 查看浏览历史,通过GET请求发送到"11.php"。预计这个页面会展示之前存储在会话变量'history'中的用户访问历史。
  • 注释掉的// var_dump ($_SESSION); 用来调试,查看整个会话变量的内容。

4.用户登出,清除会话信息

php源码:10.php

<?php

    session_start();

 

    session_destroy();

   

    header("Location: 08.html");

?>

  1. session_start(): 这个函数启动一个新的或恢复一个现有的会话。在执行任何与会话相关的操作之前,调用它是必要的。

  2. session_destroy(): 这个函数用来销毁当前用户的会话。它会清除与当前会话相关的所有数据,包括会话变量等。当你希望用户注销并结束他们的会话时,这是一个关键的操作,以确保安全和隐私。

  3. header("Location: 08.html"): 此行代码发送一个HTTP头信息给浏览器,指示浏览器重定向到指定的URL——在这个例子中是"08.html"。通常,这用于在用户注销后将他们重定向回登录页面或其他默认页面,以避免用户在注销后仍然停留在具有权限要求的页面上。

代码作用:

  • 先确保会话已经启动。
  • 销毁当前用户的会话,清除所有会话数据,实现用户登出。
  • 通过HTTP重定向将用户送回到登录页面("08.html"),完成整个注销流程。

<1>查看保存的session信息

路径:phpStudy\tmp\tmp

 

5.输出用户历史浏览信息

php源码:11.php

    session_start();

    //var_dump($_SESSION);

    array_unshift($_SESSION['history'],basename(__FILE__));

    foreach($_SESSION['history'] as $k=>$v){

        echo $v . '<hr><br>';

    }

    echo'<form action="06.php" method= "get">';

    echo'<button type="submit">dianji</button>;';

    echo'</form>';

 

  1. session_start();: 启动或恢复一个会话。这是访问会话变量之前必须执行的操作。

  2. **array_unshift(_SESSION['history'], basename(__FILE__));**: 这行代码将当前脚本的文件名(通过`basename(__FILE__)`获取)添加到`_SESSION['history']数组的开头。这意味着每次此脚本运行时,都会记录下这次访问。array_unshift`函数用于在数组开头插入元素。

  3. foreach(𝑆𝐸𝑆𝑆𝐼𝑂𝑁[′ℎ𝑖𝑠𝑡𝑜𝑟𝑦′]𝑎𝑠S​ESSION[′history′]ask=>𝑣):使用foreach循环遍历‘_SESSION['history']`数组中的每个元素。对于数组中的每一项(每个浏览历史记录),它将执行循环体内的代码。

  4. echo $v . '<hr><br>';: 在循环内部,这行代码输出当前的历史记录条目(文件名),并跟随着一个水平分割线<hr>和一个换行<br>,以便在网页上清晰地分隔每个历史记录。

  5. echo'<form action="06.php" method= "get">';

    echo'<button type="submit">dianji</button>;';

    echo'</form>';

    拼接form表单,添加按钮,点击返回主页

 

 

 

 

 

 

相关文章:

全栈:session用户会话信息,用户浏览记录实例

PHP中的session是一种存储机制&#xff0c;它允许您存储和跟踪用户在访问Web应用程序时的信息。会话通常用于存储用户特定的数据&#xff0c;如用户ID、购物车内容、用户偏好设置等&#xff0c;这些数据需要在多个页面请求之间保持不变。 session详解 1. 会话是如何工作的 会…...

设计模式--》 装饰模式的应用

装饰模式的定义&#xff1a; 装饰模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你动态地给一个对象添加一些额外的职责。就增加功能来说&#xff0c;装饰模式相比生成子类更为灵活。 何时应用装饰模式&#xff1f; 1.当需要动态地给…...

深入解析Web前端三大主流框架:Angular、React和Vue

Web前端三大主流框架分别是Angular、React和Vue。下面我将为您详细介绍这三大框架的特点和使用指南。 Angular 核心概念: 组件(Components): 组件是Angular应用的构建块,每个组件由一个带有装饰器的类、一个HTML模板、一个CSS样式表组成。组件通过输入(@Input)和输出(…...

ch3运输层--计算机网络期末复习(持续更新中)

运输层位于网络层之上 运输层协议提供的某些服务受到网络层协议的限制。比如,时限和带宽保证。 运输层也提供自己的特殊服务。比如,可靠数据传输服务,安全性服务。 网络层:两个主机之间的逻辑通信 运输层:两个进程之间的逻辑通信 网络地址:主机的标识(IP地址) 传输地址: …...

mysql中的内连接与外连接

在MySQL中&#xff0c;内连接和外连接是用于从多个表中检索数据的两种不同的连接方式。 内连接&#xff08;INNER JOIN&#xff09;&#xff1a; 内连接返回两个表之间匹配的行。它只返回两个表中共同匹配的行&#xff0c;如果在一个表中没有匹配到对应的行&#xff0c;则不会显…...

0基础认识C语言(理论+实操 2)

小伙伴们大家好&#xff0c;今天也要撸起袖子加油干&#xff01;万事开头难&#xff0c;越学到后面越轻松~ 话不多说&#xff0c;开始正题~ 前提回顾&#xff1a; 接上次博客&#xff0c;我们学到了转义字符&#xff0c;最后留下两个转义字符不知道大家有没有动手尝试了一遍&a…...

ChatGPT的基本原理是什么?又该如何提高其准确性?

在深入探索如何提升ChatGPT的准确性之前&#xff0c;让我们先来了解一下它的工作原理吧。ChatGPT是一种基于深度学习的自然语言生成模型&#xff0c;它通过预训练和微调两个关键步骤来学习和理解自然语言。 在预训练阶段&#xff0c;ChatGPT会接触到大规模的文本数据集&#x…...

云计算OpenStack基础

1.什么是虚拟化&#xff1f; •虚拟化是云计算的基础。 •虚拟化是指计算元件在虚拟的而不是真实的硬件基础上运行。 •虚拟化将物理资源转变为具有可管理性的逻辑资源&#xff0c;以消除物理结构之间的隔离&#xff0c;将物理资源融为一个整体。虚拟化是一种简化管理和优化…...

[10] CUDA程序性能的提升 与 流

CUDA程序性能的提升 与 流 1. CUDA程序性能的提升 在本节中,我们会看到用来遵循的基本的一些性能来提升准则,我们会逐一解释它们1.1 使用适当的块数量和线程数量 研究表明,如果块的数量是 GPU 的流多处理器数量的两倍,则会给出最佳性能,不过,块和线程的数量与具体的算法…...

TH方程学习(1)

一、背景介绍 根据CW方程的学习&#xff0c;CW方程的限制条件为圆轨道&#xff0c;不考虑摄动&#xff0c;二者距离相对较小。TH方程则可以将物体间的相对运动推广到椭圆轨道的二体运动模型&#xff0c;本部分将结合STK的仿真功能&#xff0c;联合考察TH方程的有用性&#xff…...

【九十七】【算法分析与设计】图论,迷宫,1207. 大臣的旅费,走出迷宫,石油采集,after与迷宫,逃离迷宫,3205. 最优配餐,路径之谜

1207. 大臣的旅费 - AcWing题库 很久以前&#xff0c;TT 王国空前繁荣。 为了更好地管理国家&#xff0c;王国修建了大量的快速路&#xff0c;用于连接首都和王国内的各大城市。 为节省经费&#xff0c;TT 国的大臣们经过思考&#xff0c;制定了一套优秀的修建方案&#xff0c;…...

【Tools】SpringBoot工程中,对于时间属性从后端返回到前端的格式问题

Catalog 时间属性格式问题一、需求二、怎么使用 时间属性格式问题 一、需求 对于表中时间字段&#xff0c;后端创建对应的实体类的时间属性需要设定格式&#xff08;默认的格式不方便阅读&#xff09;&#xff0c;再返回给前端。 二、怎么使用 导入jackson相关的坐标&#x…...

算法训练营day35

题目1&#xff1a;122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; 贪心算法思路很简单&#xff0c;就是把每一天的利润都算出来&#xff0c;然后把整的加起来就是结果 class Solution { public:int maxProfit(vector<int>& prices) {int resu…...

代码随想录-Day23

669. 修剪二叉搜索树 方法一&#xff1a;递归 class Solution {public TreeNode trimBST(TreeNode root, int low, int high) {if (root null) {return null;}if (root.val < low) {return trimBST(root.right, low, high);} else if (root.val > high) {return trimBS…...

基于Visual Studio版本的AI编程助手

Visual Studio 是一个出色的 IDE,可用于构建适用于 Windows、Mac、Linux、iOS 和 Android 的丰富、精美的跨平台应用程序。 使用一系列技术(例如 WinForms、WPF、WinUI、MAUI 或 Xamarin)构建丰富。 1、安装 点击上方工具栏拓展选项,选择管理拓展选项 接着在联机页面中搜索&q…...

04-Vue:ref获取页面节点--很简单

目录 前言在Vue中&#xff0c;通过 ref 属性获取DOM元素使用 ref 属性获取整个子组件&#xff08;父组件调用子组件的方法&#xff09; 前言 我们接着上一篇文章 03-02-Vue组件之间的传值 来讲。 下一篇文章 05-Vue路由 在Vue中&#xff0c;通过 ref 属性获取DOM元素 我们当然…...

CBK-D2-安全与架构工程.md

CBK-D2-安全与架构工程 密码学和对称密钥算法 密码通信的基础知识 明文P-plaintext、加密encrypt、密文C-ciphertext、解密decrypt、密钥Key 多数情况下,密钥无非是一个极大的二进制数 每一种算法都有一个特定密钥控制key space,是一个特定的数值范围 密钥空间由位大小b…...

Windows驱动开发系列文章一

文章目录 环境搭建如何调试实时调试非实时调试 环境搭建 基本上按照官方网站安装 VisualStudio/SDK/WDK 这些软件就可以了 详情请参考这个安装链接 如何调试 Windows 调试分为两种&#xff1a;一种是实时调试&#xff0c;一种是非实时调试 实时调试 这个就需要用到Microso…...

java项目之人事系统源码(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的人事系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于vue的人事系统的主要使用者…...

I/O '24|学习资源焕新,技术灵感升级

2024 年 5 月 15 日凌晨举行的 Google I/O 大会为各地的开发者们带来了新的灵感。面对技术革新&#xff0c;相信各位开发者们都迫不及待想要自己上手试一试。 别急&#xff0c;Google 谷歌今年为中国的开发者们准备了一份特别的学习资源&#xff0c;让开发者们自由探索新知。 G…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

StarRocks 全面向量化执行引擎深度解析

StarRocks 全面向量化执行引擎深度解析 StarRocks 的向量化执行引擎是其高性能的核心设计&#xff0c;相比传统行式处理引擎&#xff08;如MySQL&#xff09;&#xff0c;性能可提升 5-10倍。以下是分层拆解&#xff1a; 1. 向量化 vs 传统行式处理 维度行式处理向量化处理数…...

MeanFlow:何凯明新作,单步去噪图像生成新SOTA

1.简介 这篇文章介绍了一种名为MeanFlow的新型生成模型框架&#xff0c;旨在通过单步生成过程高效地将先验分布转换为数据分布。文章的核心创新在于引入了平均速度的概念&#xff0c;这一概念的引入使得模型能够通过单次函数评估完成从先验分布到数据分布的转换&#xff0c;显…...

Spring Boot 中实现 HTTPS 加密通信及常见问题排查指南

Spring Boot 中实现 HTTPS 加密通信及常见问题排查指南 在金融行业安全审计中&#xff0c;未启用HTTPS的Web应用被列为高危漏洞。通过正确配置HTTPS&#xff0c;可将中间人攻击风险降低98%——本文将全面解析Spring Boot中HTTPS的实现方案与实战避坑指南。 一、HTTPS 核心原理与…...

C++.OpenGL (9/64)摄像机(Camera)

颜色(Color) 颜色理论在OpenGL中的应用 #mermaid-svg-dKNDfS4EKDUmG4Ts {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-dKNDfS4EKDUmG4Ts .error-icon{fill:#552222;}#mermaid-svg-dKNDfS4EKDUmG4Ts .error-text…...

十、【ESP32开发全栈指南: TCP客户端】

一、TCP协议核心特性回顾 TCP与UDP关键差异 特性TCPUDP连接方式面向连接 (三次握手)无连接可靠性可靠传输 (重传/排序/校验)尽力交付数据顺序保证数据按序到达不保证顺序流控制滑动窗口机制无流控制传输效率协议开销大头部开销小适用场景文件传输、网页浏览实时音视频、广播通…...