php SESSION類(購物車類)_PHP教程

來源:互聯網
上載者:User
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 類了。

代碼如下 複製代碼


/**
* 檔案描述 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購物車類

代碼如下 複製代碼

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.bkjia.com/PHPjc/633150.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/633150.htmlTechArticleSESSION是php中一個比較常用的東西了,我們經常把它用作記錄全域頁面資訊,如果使用者登入,後台管理,還有一個常用的就中購物車類了,下...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.