CodeIgniter下使用PHP的原生Session

CodeIgniter框架在3.0之前的版本session是存储到cookie中的,在实际的Web应用中有许多不便。github上有很多让CI框架中使用PHP原生session的库。我选择了CodeIgniter-Native-Session

安装方法很简单,照着作者提供的安装方法进行安装即可。下面提供一个验证的方法。
在192.168.0.1上起一个memcache用于存储php的session,启动命令如下:

/usr/local/webserver/memcached/bin/memcached -d -c20480 -u root -m 5 -l 192.168.0.1 -p10000

php.ini中将session存储到memcache中。php.ini中相关部分的设置如下:

[Session]
; Handler used to store/retrieve data.
; http://php.net/session.save-handler
;session.save_handler = files
session.save_handler = memcache
session.save_path = tcp://192.168.0.1:10000

设置好之后,重启php fast cgi。
编写测试程序test.php:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Test extends CI_Controller {

        public function index()
        {
                //$this->load->view('welcome_message');
                $this->load->library('session');
                print_r($this->session->all_userdata());
        }
}

/* End of file test.php */
/* Location: ./application/controllers/test.php */

用浏览器访问test这个controller,通过firebug可以看到cookie中PHPSESSID的值是c0r5sr59sng0535613ui9h7hb5。
通过命令行验证相关session是否存到了memcache中,

telnet 192.168.0.1:10000

以c0r5sr59sng0535613ui9h7hb5为key获取相关信息。

get c0r5sr59sng0535613ui9h7hb5

可以看到有类似下面的结果输出,则session已经存到了memcache中。注意,dev是设置在config/session.php里面的sess_namespace的值。

VALUE c0r5sr59sng0535613ui9h7hb5 0 97
dev|a:2:{s:10:"session_id";s:32:"d6be0f31ed57feadda66293546ac03bd";s:9:"expire_at";i:1378383924;}
END

除非注明,本博客文章均为原创,转载请以链接形式标明本文地址

本文地址: http://blog.cnwyhx.com/?p=221

Leave a Reply