您现在的位置是:首页 > cms教程 > Ecshop商城教程Ecshop商城教程
ecshop中的SESSION机制说明
张准辰2024-11-28Ecshop商城教程已有人查阅
导读ecshop中的session机制不是PHP自带的,而是ecshop自定义的一套机制,这两天利用时间学习了一下,以下是学习笔记。 1.session的初始化是在 includes下的 init.php 文件中,具体代码
ecshop中的session机制不是PHP自带的,而是ecshop自定义的一套机制,这两天利用时间学习了一下,以下是学习笔记。
1.session的初始化是在 includes下的 init.php 文件中,具体代码如下:
(1)基础设置,清空session,为成员变量赋值,包括($this->session_cookie_path、$this->session_cookie_domain、$this->session_cookie_secure)
(1)gen_session_id() 生成一个session_id,并插入到数据库
(5)update_session() 更新session
1.session的初始化是在 includes下的 init.php 文件中,具体代码如下:
if (!defined('INIT_NO_USERS'))
{
/* 初始化session */
include(ROOT_PATH . 'includes/cls_session.php');
$sess = new cls_session($db, $ecs->table('sessions'), $ecs->table('sessions_data'));
define('SESS_ID', $sess->get_session_id());
}
2.cls_session类的构造函数都做什么了?(1)基础设置,清空session,为成员变量赋值,包括($this->session_cookie_path、$this->session_cookie_domain、$this->session_cookie_secure)
$GLOBALS['_SESSION'] = array();//清空session
if (!empty($GLOBALS['cookie_path']))
{
$this->session_cookie_path = $GLOBALS['cookie_path'];
}
else
{
$this->session_cookie_path = '/';
}
if (!empty($GLOBALS['cookie_domain']))
{
$this->session_cookie_domain = $GLOBALS['cookie_domain'];
}
else
{
$this->session_cookie_domain = '';
}
if (!empty($GLOBALS['cookie_secure']))
{
$this->session_cookie_secure = $GLOBALS['cookie_secure'];
}
else
{
$this->session_cookie_secure = false;
}
$this->session_name = $session_name; //session名称,默认 'ECS_ID'
$this->session_table = $session_table;
$this->session_data_table = $session_data_table;
$this->db = &$db;
$this->_ip = real_ip();//客户真实IP
(2)获取 session_id,如果cookie中存在就从cookie中获取,如果不存在就设置为空。
if ($session_id == '' && !empty($_COOKIE[$this->session_name]))
{
$this->session_id = $_COOKIE[$this->session_name];
}
else
{
$this->session_id = $session_id;
}
(3)如果cookie中存在session_id,就效验此session_id的真实性
if ($this->session_id)
{
$tmp_session_id = substr($this->session_id, 0, 32);
if ($this->gen_session_key($tmp_session_id) == substr($this->session_id, 32))
{
$this->session_id = $tmp_session_id;
}
else
{
$this->session_id = '';
}
}
(4)如果session_id存在就加载该session_id下的session数据,如果不存在就生成一个session_id并插入到数据库
$this->_time = time();
if ($this->session_id)
{
//如果存在session_id,加载该session_id 下的所有session
$this->load_session();
}
else
{
$this->gen_session_id();
setcookie($this->session_name, $this->session_id . $this->gen_session_key($this->session_id), 0, $this->session_cookie_path, $this->session_cookie_domain, $this->session_cookie_secure);
}
3.cls_session类其它重要方法(1)gen_session_id() 生成一个session_id,并插入到数据库
function gen_session_id()
{
$this->session_id = md5(uniqid(mt_rand(), true));
return $this->insert_session();
}
(2)gen_session_key($session_id) 效验客户端session_id真实性
function gen_session_key($session_id)
{
static $ip = '';
if ($ip == '')
{
$ip = substr($this->_ip, 0, strrpos($this->_ip, '.'));
}
return sprintf('%08x', crc32(ROOT_PATH . $ip . $session_id));
}
(3)insert_session() 插入一条session
function insert_session()
{
return $this->db->query('INSERT INTO ' . $this->session_table . " (sesskey, expiry, ip, data) VALUES ('" . $this->session_id . "', '". $this->_time ."', '". $this->_ip ."', 'a:0:{}')");
}
(4)load_session() 通过session_id加载session(5)update_session() 更新session
本文标签:
很赞哦! ()
下一篇:ecshop后台分页写法示例分析
相关教程
图文教程
ecshop报错Deprecated: preg_replace()的解决方法
preg_replace() 函数中用到的修饰符 /e 在 PHP5.5.x 中已经被弃用了。如果你的PHP版本恰好是PHP5.5.X,那你的ECSHOP肯定就会报类似这样的错误。
删除ecshop底部共执行个查询Gzip已禁用怎么删除
“共执行41个查询,用时2.607806 秒,在线1人,Gzip已禁用,占用内存 3.271 MB”这段代码是ecshop自带的功能。但是由于内容基本没啥作用而且非常长一些客户希望删除
让ecshop商品在弹出新窗口打开的方法
这个主要是修改模板文件,下面教程以官方默认模板为例,其他模板同理。打开themes/default/library/recommend_promotion.lbi文件
ecshop商品页显示供应商/供货商名称的方法
好久没写文章了,隐约记得前几天有人问到这个问题:【如何在ecshop商品详情页面显示该商品的供货商?】
相关源码
-
(自适应)英文电子芯片电子元件网站pbootcms模板下载基于PbootCMS内核开发的电子元件类企业专用模板,采用响应式设计技术,适配电子元器件、集成电路、半导体等行业的品牌展示与技术文档发布需求。前端布局针对芯片参数表格与产品规格书展示进行深度优化。查看源码 -
(自适应)蓝色五金制品配件管件pbootcms网站源码下载基于PbootCMS内核开发的五金行业专用模板,采用响应式设计架构,确保产品展示在各类移动设备上的呈现。通过模块化布局与工业风视觉设计,帮助五金企业高效展示产品规格、应用场景及技术支持,建立专业可靠的行业形象。查看源码 -
帝国cms7.5个人博客资讯文章模板下载本模板简洁个人博客网站设计开发,采用帝国CMS内核构建,只需替换文字图片即可快速搭建专业网站。自适应手机端设计,数据实时同步,操作简单便捷。PHP程序确保安全稳定运行,帮助您以较低成本获取持续业务。查看源码 -
(自适应响应式)瓷砖大理石装修建材类网站pbootcms模板html5模板本模板基于PbootCMS开发,针对瓷砖、大理石等建材行业特点进行优化设计。采用响应式布局技术,确保产品展示效果在不同设备上都能合理呈现。模板特别强化了石材纹理的视觉表现力,帮助建材企业更好地展示产品质感。查看源码 -
(PC+WAP)红色厨具厨房用品设备pbootcms模板源码下载为厨具设备企业设计的响应式网站模板,采用PbootCMS内核开发,适用于商用厨房设备、家用厨具、厨房用品等企业展示。模板包含产品展示、新闻动态、案例中心等标准模块,助您快速搭建专业级行业网站。查看源码 -
(PC+WAP)门窗门业家居定制铝合金产品pbootcms模板下载基于PbootCMS内核开发的门窗门业企业专用模板,采用响应式设计结构,数据一次录入即可同步适配电脑与手机端浏览。通过简洁大气的视觉呈现,帮助门窗企业快速建立专业线上展示平台,有效传递产品价值与服务优势。查看源码
| 分享笔记 (共有 篇笔记) |
