phpcms中session的处理

原创 2016年06月01日 22:33:13

一、phpcms中session的处理

下面的语句读取caches\configs\下的system.php,得到其设置session_storage的设置,默认为mysql(此时数据保存在v9_session表中),也可以是文件。然后装载对应的处理库。

$session_storage ='session_'.pc_base::load_config('system','session_storage');

pc_base::load_sys_class($session_storage);

 

文件的session处理库:  phpcms\libs\classes\session_files.class.php

Mysql的session处理库:  phpcms\libs\classes\session_mysql.class.php

 

在上面的处理库的构造函数中,调用php的session_set_save_handler()设置session的open,close,read,write,destroy,gc对应的处理函数。如下所示:

public function __construct() {

                   $this->db= pc_base::load_model('session_model');

                   $this->lifetime= pc_base::load_config('system','session_ttl');

             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的地方,添加如下2行代码即可:

$session_storage ='session_'.pc_base::load_config('system','session_storage');

pc_base::load_sys_class($session_storage);


二、app端与web端不能同时登录的解决办法

1.当用户登录时,根据用户id查询“用户登录信息表”是否存在该用户的信息,如果存在则取出对应的sessionid,并如下方式销毁当前用户已有的session:

 
$session_id = $info['sessionid'];
if(!empty($session_id) ) {
    session_id($session_id);
    $_COOKIE[session_name()]=$session_id;
    $_GET[session_name()]=$session_id;

    $session_storage = 'session_' . pc_base::load_config('system', 'session_storage');
    pc_base::load_sys_class($session_storage);

    session_unset();
    session_destroy();
}

原来的session被销毁了,再使用$_SESSION['userid']将得到空值,此时就意味着自己被踢出来了。


然后创建一个新的sessionid,将用户id及sessionid保存到“用户登录信息表”中。
session_start();
session_regenerate_id();
$info['token'] = session_id();
$info['userid'] = '123456';

设置一些信息到session:
$_SESSION['userid'] = '123456';
$_SESSION['username'] = 'test';
此时得到一个新的sessionid及session,保存有当前用户的一些信息。  



2.在其它使用session的地方,如下方式重构出session或者新建一个session:
$session_id = $_GET['PHPSESSIONID'] ? $_GET['PHPSESSIONID'] : $_POST['PHPSESSIONID'];
if(!empty($session_id) )
    session_id($session_id);

$session_storage = 'session_' . pc_base::load_config('system', 'session_storage');
pc_base::load_sys_class($session_storage);

phpcmsv9 如何实现用户登录

因为有时候我们需要自己实现用户登录,比如我们用phpcms做一个微信Oauth2.0授权,授权之后直接登录,这过程中不需要用户输入账户和密码。所以我们就要搞清楚,phpcmsv9它是怎么实现用户登录的...
  • vailook
  • vailook
  • 2016年08月04日 14:10
  • 1674

【phpcms-v9】前台content模块中pc标签的调用说明

[html] view plaincopy内容模块PC标签调用说明    模块名:content    模块提供的可用操作        操作名         说明            lists...
  • yming0221
  • yming0221
  • 2014年01月11日 23:04
  • 10468

【phpcms v9】phpcms-v9系统中session存储机制相关文件

一、存储介质为数据库:"phpcms/libs/classes/session_mysql.class.php"
  • yanhui_wei
  • yanhui_wei
  • 2015年07月19日 17:18
  • 4057

PHPCMS与CI框架整合(一):实现Session共享

原系统是在PHPCMS基础上进行开发的,应用部署为www.domain.com。中途开发基于CI框架的财务功能,部署为finance.domain.com。为了实现Session共用,需同步两套框架S...
  • soonfly
  • soonfly
  • 2016年11月15日 14:44
  • 736

PHPCMS伪静态时rewrite匹配参数超过10个的处理方法 分类信息伪静态

我们知道,在伪静态中 rewrite 只能定义到$9的,超过了便无效了,而实际使用中却有需要9个以上参数的时候,那么怎么来解决呢?详见下文分解。 RewriteRule反向引用 ,引用方法是:$N...
  • vailook
  • vailook
  • 2016年07月13日 18:13
  • 1409

phpcms的栏目缓存无限级罗列展示处理方法

  • qidizi
  • qidizi
  • 2013年07月04日 18:34
  • 1116

phpcms水印图片的处理,以及thumb()剪切缩略图函数

第一步:找到 statics/images/water 文件夹,将去删除;如果系统找不到water文件夹的水印图片,则将会执行第二步,给图片添加一个文本格式的水印 第二步:找到 phpcms/lib...
  • u011222372
  • u011222372
  • 2017年03月01日 16:40
  • 774

Nginx 1.2.1 + JBOSS AS 7 负载配置及Session处理

  • 2014年10月19日 21:44
  • 2.71MB
  • 下载

Ajax请求session超时处理流程

  • 2010年02月13日 15:40
  • 4KB
  • 下载

一般应用程序中如何处理Web页面的Session问题

  • 2012年04月23日 13:30
  • 21B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:phpcms中session的处理
举报原因:
原因补充:

(最多只允许输入30个字)