全栈: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表单,添加按钮,点击返回主页

相关推荐
两个人的幸福10 天前
Windows 桌面应用自研 PHP 队列(下):完整代码与六大工程化优化
php
zzzzzz31010 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
BingoGo12 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack12 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户30745969820713 天前
PHP 扩展——从入门到理解
php
鹏仔先生14 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
大树8814 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
LDR00614 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术14 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园14 天前
C++20 Modules 模块详解
java·开发语言·spring