php构造函数中用session,phpcms中session的处理

一、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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值