首页 > php开发 > php SESSION类(购物车类)

php SESSION类(购物车类)

SESSION是php中一个比较常用的东西了,我们经常把它用作记录全局页面信息,如果用户登录,后台管理,还有一个常用的就中购物车类了,下面我来给大家介绍一下。

关于 SESSION 在 php 中的应用是必不要少的,最重要的功能之一,SESSION 在网络应用中,称为"会话",我们通常理解为存储特定用户会话所需的信息,这样,当用户在网站页面之间跳转时,存储的 SESSION 值不会丢失,而是在整个用户会话中一直存活下去。通俗一点讲,就是当用户A上网时,会创建一个ID(a)值进行保存下来,如果你的ID(A)值没有进行注销,下次上网时,这个网站还会记得你的ID(A)值,这个时候就可以在网上进行调用你的ID(A)值了,比如欢迎您ID(A)值再一次访问。

关于在 PHP 中应用 SESSION 值是很简单的,只要在顶端提前输入 session_start() 开始会话即可,下面就可以进行使用 SESSION 了,这只是小网站的应用方法,实际上,SESSION 自身还有许多属性,比如 SESSION周期,调用SESSION,SESSION数据有效期,SESSION保存,SESSION注销等等,如果有了这些属性,看起来才算是一个比较规范的SESSION应用会话。

下面是一个完整的 Session 类,整合了 Session 最基本的属性值,其中,打开,关闭与清理是符合php编程规范的,这也是一个很好的习惯。小小的说明一下,如果网站不是大量使用 Session 类,基本上就没必要使用 SESSION 类了。

<?php
/**
 * 文件描述 Session类
 * =================================================================
 * 文件名称 session.class.php
 * -----------------------------------------------------------------
 * 适用环境: PHP5.2.x / mysql 5.0.x
 * -----------------------------------------------------------------
 * 作 者 04ie。com
 * -----------------------------------------------------------------
 * 创建时间 2010-2-1
 * =================================================================
 */
class Session {
    /**
     * session默认有效时间
     * @access public
     * @var ineger $_expiry
     */
    public $_expiry = 3600;
    /**
     * 有效域名
     * @access public
     * @var string $_domain
     */
    public $_domain = '.phpfamily.cn';
    //初始化
    public function __construct() {
        ini_set('session.use_trans_id', 0);
        ini_set('session.gc_maxlifetime', $this->_expiry);
        ini_set('session.use_cookie', 1);
        ini_set('session.cookie_path', '/');
        ini_set('session.cookie_domain', $this->_domain);
        session_module_name('user');
        session_set_save_handler(array(&$this,
            'open'
        ) , array(&$this,
            'close'
        ) , array(&$this,
            'read'
        ) , array(&$this,
            'write'
        ) , array(&$this,
            'destroy'
        ) , array(&$this,
            'gc'
        ));
        session_start();
    }
    /**
     * 打开session
     * @access public
     * @param string $savePath
     * @param string $sName
     * @return true
     */
    public function open($savePath, $sName) {
        $this->_conn = mysql_connect('localhost', 'root', '');
        mysql_select_db('databases');
        mysql_query('SET NAMES "utf8"');
        return true;
    }
    /**
     * 关闭session
     * @access public
     * @return bool
     */
    public function close() {
        return mysql_close($this->_conn);
    }
    /**
     * 读取session
     * @access public
     * @param string $sid sessionID
     * @return mixed
     */
    public function read($sid) {
        $sql = "SELECT data FROM sessions WHERE sessionid='%s'";
        $sql = sprintf($sql, $sid);
        $res = mysql_query($sql, $this->_conn);
        $row = mysql_fetch_assoc($res);
        return !$row ? null : $row['data'];
    }
    /**
     * 写入session
     * @access public
     * @param string $sid sessionID
     * @param string $data serialize序列化后的session内容
     * @return
     */
    public function write($sid, $data) {
        $expiry = time() + $this->_expiry;
        $sql = "REPLACE INTO sessions (sessionid,expiratio
n,data) VALUES ('%s', '%d', '%s')";
        $sql = sprintf($sql, $sid, $expiry, $data);
        mysql_query($sql, $this->_conn);
        return true;
    }
    /**
     * 销毁session
     * @access public
     * @param string $sid sessionID
     * @return
     */
    public function destroy($sid) {
        $sql = "DELETE FROM sessions WHERE sessionid='%s'";
        $sql = sprintf($sql, $sid);
        mysql_query($sql, $this->_conn);
        return true;
    }
    /**
     * 清理过期session
     * @access public
     * @param integer $time
     * @return
     */
    public function gc($time = 0) {
        $sql = "DELETE FROM sessions WHERE expiration < '%d'";
        $sql = sprintf($sql, time());
        mysql_query($sql, $this->_conn);
        mysql_query('OPTIMIZE TABLE sessions');
    return true;
}
?>

下面我们再看一个php session购物车类

<?php
class Cart {
    public function Cart() {
        if (!isset($_SESSION['cart'])) {
            $_SESSION['cart'] = array();
        }
    }
    /*
    添加商品
    param int $id 商品主键
    string $name 商品名称
    float $price 商品价格
    int $num 购物数量
    */
    public function addItem($id, $name, $price, $num, $img) {
        //如果该商品已存在则直接加其数量
        if (isset($_SESSION['cart'][$id])) {
            $this->incNum($id, $num);
            return;
        }
        $item = array();
        $item['id'] = $id;
        $item['name'] = $name;
        $item['price'] = $price;
        $item['num'] = $num;
        $item['img'] = $img;
        $_SESSION['cart'][$id] = $item;
    }
    /*
    修改购物车中的商品数量
    int $id 商品主键
    int $num 某商品修改后的数量,即直接把某商品
    的数量改为$num
    */
    public function modNum($id, $num = 1) {
        if (!isset($_SESSION['cart'][$id])) {
            return false;
        }
        $_SESSION['cart'][$id]['num'] = $num;
    }
    /*
    商品数量+1
    */
    public function incNum($id, $num = 1) {
        if (isset($_SESSION['cart'][$id])) {
            $_SESSION['cart'][$id]['num']+= $num;
        }
    }
    /*
    商品数量-1
    */
    public function decNum($id, $num = 1) {
        if (isset($_SESSION['cart'][$id])) {
            $_SESSION['cart'][$id]['num']-= $num;
        }
        //如果减少后,数量为0,则把这个商品删掉
        if ($_SESSION['cart'][$id]['num'] < 1) {
            $this->delItem($id);
        }
    }
    /*
    删除商品
    */
    public function delItem($id) {
        unset($_SESSION['cart'][$id]);
    }
    /*
    获取单个商品
    */
    public function getItem($id) {
        return $_SESSION['cart'][$id];
    }
    /*
    查询购物车中商品的种类
    */
    public function getCnt() {
        return count($_SESSION['cart']);
    }
    /*
    查询购物车中商品的个数
    */
    public function getNum() {
        if ($this->getCnt() == 0) {
            //种数为0,个数也为0
            return 0;
        }
        $sum = 0;
        $data = $_SESSION['cart'];
        foreach ($data as $item) {
            $sum+= $item['num'];
        }
        return $sum;
    }
    /*
    购物车中商品的总金额
    */
    public function getPrice() {
        //数量为0,价钱为0
        if ($this->getCnt() == 0) {
            return 0;
        }
        $price = 0.00;
        foreach ($this->items as $item) {
            $price+= $item['num'] * $item['price'];
        }
        return sprintf("%01.2f", $price);
    }
    /*
    清空购物车
    */
    public function clear() {
        $_SESSION['cart'] = array();
    }
}


本文地址:http://www.phprm.com/develop/53874.html

转载随意,但请附上文章地址:-)

标签:foreach select php session

相关文章

发表留言