CodeIgniter框架优化-Session支持SASL 用户名密码认证

CodeIgniter框架优化—Session驱动器支持SASL用户名密码认证

前言:

前段时间闲下来有点小空余时间,刚好需要部署CodeIgniter应用到集群服务器上面。新加了Session存储,同时又使用的是阿里云的Memcached服务,将Session存储在Memcached里面去,但是在实际应用过程中就发现,阿里云的Memcached由于是内网服务,并且在未手动开启指定内网服务器内网访问的情况下,是无法使用Session的,这就极大的增加了整个系统的局限性,所以,研究了一下CI的Session_Memcached驱动器,并做了一个小小的修改,使得CI的Session_Memcached驱动器支持SASL用户名密码认证。

系统环境

Ubuntu14.14 LTS + PHP5.5 + Apache2.4

首先在服务器上需要安装php5-dev libsasl2-dev cloog-ppl libmemcached memcached等扩展,用来支持SASL认证

apt-get -y update
apt-get -y install php5-dev
apt-get -y install libsasl2-dev cloog-ppl

wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
tar -zxvf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18
./configure --prefix=/usr/local/libmemcached
make && make install
cd ..

wget  http://pecl.php.net/get/memcached-2.2.0.tgz
tar -zxvf memcached-2.2.0.tgz
cd memcached-2.2.0
phpize5
./configure --with-libmemcached-dir=/usr/local/libmemcached --enable-memcached-sasl
make && make install

echo "memcached.use_sasl = 1" >>/etc/php5/apache2/conf.d/20-memcached.ini

接下来就是修改CI框架了。

system\libraries\Session\drivers\Session_memcached_driver.php

修改:
73成员属性中新增:

 protected $_ocs_username;

 protected $_ocs_password;

94构造方法中新增:

if (empty($this->_config['ocs_username']))
{
    log_message('error', 'Session: No Memcached Username configured.');
}else{
    $this->_ocs_username = $this->_config['ocs_username'];
}

if (empty($this->_config['ocs_password']))
{
    log_message('error', 'Session: No Memcached Password configured.');
}else{
    $this->_ocs_password = $this->_config['ocs_password'];
}

128open()方法中新增:

$this->_memcached->setOption(Memcached::OPT_COMPRESSION, false); //关闭压缩功能
$this->_memcached->setSaslAuthData($this->_ocs_username, $this->_ocs_password );
$this->_memcached->setOption(Memcached::OPT_TCP_NODELAY, true);//重要,php memcached有个bug,当get的值不存在,有固定40ms延迟,开启这个参数,可以避免这个bug

Config文件中新增2个配置项:

Config/Config.php中,
在$config['sess_save_path'] = "OCS地址";

下一行新增

$config['ocs_username'] = 'xxxxxx';
$config['ocs_password'] = 'xxxxxx';

修改完成后的Memcached存储session的配置 如下:

$config['sess_driver'] = 'memcached';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:11211";
$config['ocs_username'] = 'XXXXXX ';
$config['ocs_password'] = 'XXXXXX';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

附上linux一键执行脚本(不建议直接执行,建议手动编译安装):

#!/bin/bash

set -o errexit

USAGE="This script will automaticlly Update Server to Support Memcached SASL Authentication
Please input OK to continue the installtion"

printUsage() {
    apt-get update -y
    apt-get install -y lrzsz unzip zip
    clear
    echo -e "\033[32m$USAGE\033[0m"
}

install_SupportSoft(){
    apt-get -y install php5-dev libsasl2-dev cloog-ppl pkg-config
}

install_libmemcached(){
    cd /tmp/
    wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
    tar -zxvf libmemcached-1.0.18.tar.gz
    rm libmemcached-1.0.18.tar.gz
    cd libmemcached-1.0.18
    ./configure --prefix=/usr/local/libmemcached
    make && make install
    cd ..
}

install_memcached(){
    cd /tmp/
    wget  http://pecl.php.net/get/memcached-2.2.0.tgz
    tar -zxvf memcached-2.2.0.tgz
    rm memcached-2.2.0.tgz
    cd memcached-2.2.0
    phpize5
    ./configure --with-libmemcached-dir=/usr/local/libmemcached --enable-memcached-sasl
    make && make install
    cd ..
}
config_apache(){
    echo "memcached.use_sasl = 1" >>/etc/php5/apache2/conf.d/20-memcached.ini
    service apache2 restart
}
printUsage

read PARAMS

if [ "$PARAMS"x == "OK"x ]; then
    install_SupportSoft
    install_libmemcached
    install_memcached
    config_apache
else
    echo -e "\033[31mInput Error, TYPE ANY KEY TO EXIT!\033[0m"
    read answer
    echo -e "\033[36mExiting And Cleaning\033[0m"
fi
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值