Blogger Information
Blog 35
fans 0
comment 0
visits 25342
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
简单的电影网站与会话机制--2019年6月6日22:30分
白守的博客
Original
808 people have browsed it

本文章涉及的知识点有

1.GET参数获取和使用

2.foreach,基本使用实例

3.cookie和SESSION的作用与使用实例

4.数据库的SELECT查询

 



一个简单的电影查询功能

实例

# 0418 会话控制

## Lesson1: 数据库管理网站数据

## Lesson2. 会话机制原理与实现

_______________________________________________
<!-- 数据库文件 --> database.php
<?php

return[
    'type' => 'mysql',
    'host' => 'localhost',
    'dbname' => 'php',
    'username' => 'root',
    'password' => 'root',
];

_______________________________________________
<!-- 头部文件 --> tb.php
<?php
// 连接数据库
require 'connect.php';


// 获取网站配置信息
$sql = 'SELECT * FROM `system` LIMIT 1';
$stmt = $pdo->prepare($sql);
$stmt->execute();
$system = $stmt->fetch(PDO::FETCH_ASSOC);


// 获取栏目信息
$sql = 'SELECT * FROM `category`';
$stmt = $pdo->prepare($sql);
$stmt->execute();
$cates = $stmt->fetchAll(PDO::FETCH_ASSOC);
$cate_count = count($cates);


// 获取电影信息
$sql = 'SELECT * FROM `movies`';
$stmt = $pdo->prepare($sql);
$stmt->execute();
$movies = $stmt->fetchAll(PDO::FETCH_ASSOC);


?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="static/css/style.css">
    <meta name="description" content="<?php echo $system['key'] ?>">
    <meta name="keywords" content="<?php echo $system['desc'] ?>">
    <title><?php echo $system['title'] ?></title>
</head>
<body>
 <div class="header">
 <ul class="nav">
 <li><a href="index.php">首页</a></li>
 <?php foreach ($cates as $cate):?>
     <li><a href="list.php?cate_id=<?php echo $cate['cate_id']; ?>">
     <?php echo $cate['alias']; ?></a></li>
<?php endforeach; ?>
 </ul>
 </div>

_______________________________________________
<!-- 首页文件 --> index.php


<?php

include  'inc/tb.php';

foreach ($cates as $cate){
    echo "<h2>{$cate['alias']}</h2>";
    echo '<ol>';
    foreach($movies as $movie){
        if ($cate['cate_id'] === $movie['cate_id']){
            echo "<li><a href='detail.php?mov_id=" .$movie['mov_id']. "'>{$movie['name']}</a></li>";
        }
    }
    echo '</ol>';
}

_______________________________________________
<!-- 电影页面文件 --> detali.php


<?php
// 引入头部
include 'inc/tb.php';

// 使用get获取电影ID

$getid = $_GET['mo_id'];


foreach($movies as $movie){
    if ($movie['mov_id'] === $getid ){
        
        $mo = "<h2>{$movie['name']}</h2>";
        $mo .= "<img src='{$movie['image']}'>";
        $mo.= "<p>{$movie['detail']}</p>";
        echo $mo;

    }
}

_______________________________________________
<!-- 列表页面文件 --> list.php
<?php

include 'inc/tb.php';

// 使用get获取栏目ID
$cate_id = $_GET['cate_id'];


foreach ($cates as $cate){
    if($cate['cate_id'] === $cate_id){
        echo "<h2>{$cate['alias']}";
        echo "<ol>";
        // 遍历对应栏目的电影
        foreach($movies as $movie){
            if($cate['cate_id'] === $movie['cate_id']){
                echo "<br><li><a href='detali.php?mo_id=" .$movie['mov_id']."'>{$movie['name']}</a><span> 电影介绍:{$movie['detail']}</span></li>";
            }
        }
    }
}

运行实例 »

点击 "运行实例" 按钮查看在线实例





cookie与SESSION介绍和案例‍

<?php

// 设置

setcookie('username', 'admin');

// 可设置过期时间,默认关闭页面自动消除

// 设置user_id变量,在浏览器中一分钟后失效

setcookie('user_id', 10, time() + 60);


// 读取

// 需要刷新二次,才可以获取到cookie,原因是

// 第一次刷新,是将cookie写入到客户端, 即写操作

// 第二次刷新,是将写入到客户端的cookie数据读出来,即读操作

echo 'username = ', $_COOKIE['username'], '<br>';

echo 'user_id = ', $_COOKIE['user_id'], '<br>';


// 通过application中查看,可知username过期时间是时间戳起止计时的前一秒

// 意思就是关闭浏览器, 就会自动删除


// 如果想在一个cookie变量可存储多个值,可以使用数组语法

// 60*60表示1小时, 60*60*24表示1天

setcookie('user[name]', 'peter', time() + 60 * 60 * 24);

setcookie('user[id]', '20', time() + 60 * 60 * 24);

setcookie('user[email]', 'peter@php.cn', time() + 60 * 60 * 24);


if (isset($_COOKIE['user'])) {

    foreach ($_COOKIE['user'] as $key => $value) {

        echo "{$key} => {$value} <br>";

    }

}


// 更新,直接修改$_COOKIE全局数组对应元素值即可

if ($_COOKIE['user_id']) {

    $_COOKIE['user_id'] = 800;

}

echo 'user_id = ', $_COOKIE['user_id'];


// 删除

// 1. 方法1

unset($_COOKIE['username']);


// 2. 设置一个已经过期的持续时间

setcookie('username', '', time() - 3600);

//setcookie('PHPSESSID','',time()-3600);




// _____________________________________________________________  //


// session 会话


// 开启一个会话(之前不能有输出)

// session_start()自动设置客户端的session_id,或重启启用一个已存在的会话

session_start(); // 刷新页面, 打开application可以查看到PHPSESSID,适用于根路径


// 查看服务器上的sesscion会话存储的路径位置

echo session_save_path();

// 到该路径下可看到一个sess_为前缀,后跟session_id的文件名

// 文件内容为序列化的session变量:username|s:9:"peter zhu";user_id|i:10;

echo '<hr>';


// 设置

$_SESSION['username'] = 'peter zhu';

$_SESSION['user_id'] = 10;


// 读取

echo 'username = ', $_SESSION['username'], '<br>';

echo 'user_id = ', $_SESSION['user_id'], '<br>';


// 清除

//session_unset();  // 会话内容清空,但会话文件'sess_******'仍在

session_destroy();  // 会话内容清空,会话文删除,但客户端的cookie仍在,即会话仍在,还能重启

// 可以session_destroy()后, 再调用setcookie()清除掉客户端的session_id,就完全清除了会话

setcookie('PHPSESSID','',time()-3600,'/');




总结

俩者之间使用方法差别不大,


cookie:读取更快,不需要在服务器读取cookie

SESSION:更安全,会慢一点,因为需要在服务器读取SESSION

>


 


Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments