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();
}
}