您的位置:

人人商城源代码详细分析

一、后台管理系统

人人商城后台管理系统是基于PHP语言开发的,主要包含商品管理、订单管理、用户管理、系统设置四个模块。

在商品管理模块中,可以添加、编辑、删除商品信息,包括商品名称、价格、库存、图片等。同时可以对商品进行分类管理,方便用户查找。

订单管理模块可以查看用户下的订单,处理退货、发货等操作;用户管理模块可以管理用户信息,包括用户名称、电话、收货地址等;系统设置模块可以对网站基本设置、支付方式、短信接口、管理员权限等进行配置。

<?php
// 商品管理
public function goods(){
    $goodsList = $this->model->select('goods')->orderBy('id DESC')->get();
    $this->assign('goodsList',$goodsList);
    $this->display('goods_list.tpl');
}
// 订单管理
public function order(){
    $orderList = $this->model->select('orders')->orderBy('id DESC')->get();
    $this->assign('orderList',$orderList);
    $this->display('order_list.tpl');
}
// 用户管理
public function user(){
    $userList = $this->model->select('users')->orderBy('id DESC')->get();
    $this->assign('userList',$userList);
    $this->display('user_list.tpl');
}
// 系统设置
public function config(){
    $configList = $this->model->select('config')->get();
    $this->assign('configList',$configList);
    $this->display('config.tpl');
}
?>

二、前台展示页面

人人商城的前台展示页面主要包括主页、分类页、详情页、购物车页、结算页、支付页等。

主页展示各种热门商品,分类页按照分类展示商品,详情页展示商品详细信息,包括商品名称、价格、库存、配送方式、购买说明等,同时可以加入购物车,购物车中可以修改商品数量,进入结算页进行支付操作。

为了保护用户信息安全,人人商城采用了HTTPS协议,避免了信息被恶意截获。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title><{$goods.name}></title>
    <link rel="stylesheet" href="css/style.css">
    <script type="text/javascript" src="js/jquery.min.js"></script>
</head>
<body>
    <div class="header">
        <div class="logo">
            <a href="/"><img src="images/logo.png"></a>
        </div>
        <ul class="nav">
            <li><a href="/">首页</a></li>
            <li><a href="/list.html">分类</a></li>
            <li><a href="/cart.html">购物车</a></li>
            <li><a href="/order.html">我的订单</a></li>
            <li><a href="/user.html">个人中心</a></li>
        </ul>
    </div>
    <div class="main-wrapper">
        <div class="main">
            <div class="goodDetail">
                <img src="<{$goods.img}>">
                <div class="right">
                    <div class="title">
                        <{$goods.name}>
                    </div>
                    <div class="price">
                        <span>¥<{$goods.price}></span>
                    </div>
                    <div class="num">
                        <span>商品编号:<{$goods.id}></span>
                        <span>库存:<{$goods.stock}></span>
                    </div>
                    <div class="attrList">
                        <ul>
                            <li>颜色: 红色</li>
                            <li>尺码: S</li>
                        </ul>
                    </div>
                    <div class="btns">
                        <div class="btn addCartBtn">加入购物车</div>
                        <div class="btn buyBtn">立即购买</div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>

三、安全策略

人人商城采用了多种安全策略来保护用户数据,包括防注入、XSS攻击、CSRF攻击等。

其中,防注入方面,人人商城引入了预处理机制,对输入数据进行过滤和检查,避免恶意用户利用SQL注入等方式攻击数据库;XSS方面,使用HTML实体化技术对用户输入的数据进行转义,避免浏览器解析js代码;CSRF方面,使用Token令牌验证机制,防止攻击者伪造用户请求。

<?php
// 防注入
public function checkInput($data){
    $data = trim($data);
    $data = htmlspecialchars($data);
    $data = addslashes($data);
    return $data;
}
// XSS
public function filterHtml($html) {
    $allowTags='



  • '; $html = strip_tags($html, $allowTags); $html = htmlspecialchars($html, ENT_QUOTES, 'utf-8'); $html = str_replace(array('<','>','"',''','
    ','
    '),'',$html); return $html; } // CSRF public function checkToken() { if(empty($_SESSION['csrf_token']) || $_SESSION['csrf_token'] != $_POST['csrf_token']) { die('请求非法,请重新提交'); } } ?>

四、性能优化

为了提升用户的使用体验,人人商城做了很多性能优化工作,主要包括如下几个方面:

1. CDN加速:使用CDN技术加快图片、JS、CSS等静态资源的访问速度;

2. 缓存技术:使用Memcached和Redis等缓存技术,减少数据库访问次数;

3. 懒加载技术:图片、视频等大文件采用懒加载技术,当用户需要时再加载,减少页面加载时间;

4. 代码压缩:使用Webpack等工具对JS、CSS等代码进行压缩,减小文件体积。

const path = require('path');
const webpack = require('webpack');
const htmlWebpackPlugin = require('html-webpack-plugin');
const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');

module.exports = {
    entry: {
        app: './src/js/index.js'
    },
    output: {
        filename: 'js/[name].js',
        path: path.resolve(__dirname, 'dist')
    },
    devtool: 'source-map',
    module: {
        rules: [{
            test: /\.css$/,
            use: ExtractTextPlugin.extract({
                fallback: "style-loader",
                use: "css-loader"
            })
        }]
    },
    plugins: [
        new ExtractTextPlugin('css/[name].css'),
        new htmlWebpackPlugin({
            filename: 'index.html',
            template: './src/view/index.html',
            inject: true,
            title: '人人商城',
            minify: {
                removeComments: true,
                collapseWhitespace: true
            }
        }),
        new UglifyJSPlugin(),
        new CleanWebpackPlugin(['dist'])
    ]
}