什么是PHP SESSION会话?

Session(会话) 是服务器端存储用户临时数据的一种机制,用于跟踪用户在网站上的活动状态。与Cookie存储在客户端不同,Session数据完全存储在服务器端,客户端只是通过Cookie保存一个Session ID作为访问凭证。

Session(会话一般有以下几个步骤):

Session(会话)

Session数据要么存放在Session文件里,要么存放在数据库。

下面,我们将学习如何实际操作Session会话。

基本思路:准备3个页面,一个index.php,用于验证浏览器cookie,如果没有登录状态,则进行head('login.php')跳转,有则直接加载用户信息。一个login.php,开启会话,验证表单内容,这里默认用户只能是username='admin',password='123456',验证成功,设置Session数组内容。logout.php则是进行清除Session 会话,主要有3种方法,1. 重新赋值array(),2. 通过session_get_cookie_params()获取cookie参数,然后setcookie()直接销毁,3. 通过session_destory()函数直接销毁。

三个页面如下:

index.php:

<?php
// index.php - 首页
session_start();

// 检查用户是否已登录
$is_logged_in = isset($_SESSION['user_id']);
?>

<!DOCTYPE html>
<html>
<head>
    <title>首页</title>
</head>
<body>
    <h1>欢迎来到Dotcpp编程-PHP教程</h1>
    
    <?php if ($is_logged_in): ?>
        <h2>你好,<?php echo htmlspecialchars($_SESSION['username']); ?>!</h2>
        <p>登录时间: <?php echo $_SESSION['login_time']; ?></p>
        <p>用户ID: <?php echo $_SESSION['user_id']; ?></p>
        
        <h3>Session内容:</h3>
        <pre><?php print_r($_SESSION); ?></pre>
        <p><a href="logout.php">退出登录</a></p>
    <?php else: ?>
        <p>你还没有登录</p>
        <p><a href="login.php">点击这里登录</a></p>
    <?php endif; ?>
    
    <hr>
    <h3>调试信息:</h3>
    <p>Session ID: <?php echo session_id(); ?></p>
    <p>Cookie中的Session ID: <?php echo $_COOKIE[session_name()] ?? '无'; ?></p>
</body>
</html>


login.php:

<?php
// login.php - 登录页面
session_start();
// 如果已登录,直接跳转到首页
if (isset($_SESSION['user_id'])) {
    header('Location: index.php');
    exit;
}
// 处理登录表单
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = $_POST['username'];
    $password = $_POST['password'];
    
    // 简单验证(实际项目要从数据库验证)
    if ($username === 'admin' && $password === '123456') {
        // 登录成功,设置Session
        $_SESSION['user_id'] = 1;
        $_SESSION['username'] = $username;
        $_SESSION['login_time'] = date('Y-m-d H:i:s');
        
        // 跳转到首页
        header('Location: index.php');
        exit;
    } else {
        $error = "用户名或密码错误";
    }
}
?>
<!DOCTYPE html>
<html>
<head>
    <title>登录页面</title>
</head>
<body>
    <h2>用户登录</h2>
    
    <?php if (isset($error)): ?>
        <p style="color: red;"><?php echo $error; ?></p>
    <?php endif; ?>
    
    <form method="POST" action="">
        <p>用户名: <input type="text" name="username" required></p>
        <p>密码: <input type="password" name="password" required></p>
        <p><input type="submit" value="登录"></p>
    </form>
    
    <p><a href="index.php">返回首页</a></p>
</body>
</html>


logout.php:

<?php
// logout.php - 退出登录
session_start();
// 方法1:清空Session数据
$_SESSION = array();
// 方法2:删除Session Cookie
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(
        session_name(), 
        '', 
        time() - 42000,
        $params["path"], 
        $params["domain"],
        $params["secure"], 
        $params["httponly"]
    );
}
// 方法3:销毁Session
session_destroy();
// 跳转到首页
header('Location: index.php');
exit;
?>


具体操作演示:

1. 来到index.php页面,由于没有进行身份验证,导致Session数组缺乏$_SESSION['user_id'],不能展示完整页面。

index.php

2. 进入登录页面:填写(admin-123456)完成身份认证,自动设置session数组:

login.php

3. 登录完成:

index.php

4. 退出登录,销毁Session数组,结束会话:

结束会话

总结:Session对PHP开发人员的重要性是五星级的核心必备技能,它是实现用户状态管理、身份验证、数据持久化的基石,直接决定了Web应用的安全性和用户体验,不会使用Session就等于不会做需要登录功能的网站。

点赞(1)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)