用户
 找回密码
 入住 CI 中国社区
搜索
查看: 5551|回复: 8
收起左侧

[库 Library] 我重写的session类

[复制链接]
发表于 2013-1-6 00:00:47 | 显示全部楼层 |阅读模式
我不知道为什么ci把session存在了cookie里面,但是我不希望这么做,于是我重写了session类,如果大家有需要可以下载来用。<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class MY_Session {

        /**
         * Construct
         *
         * This is the construct function
         *
         * @access public
         * @return void
         */
        public function __construct() {
                $this->set_name();
                $this->commit();
                return;
        }

        /**
         * start
         *
         * Start session
         *
         * @param string
         * @access public
         * @return void
         */
        public function start($oid = null) {
                if( $oid === null ) {
                        session_start();
                } else {
                        session_start($oid);
                }
                return;
        }

        /**
         * commit
         *
         * Write session data and end session
         *
         * @access public
         * @return void
         */
        public function commit() {
                session_write_close();
                return;
        }

        /**
         * delete
         *
         * Unset session
         *
         * @access public
         * @return void
         */
        public function delete() {
                session_unset();
                return;
        }

        /**
         * destroy
         *
         * Destroy session
         *
         * @access public
         * @return boolean
         */
        public function destroy() {
                return session_destroy();
        }

        /**
         * regenerate_id
         *
         * Regenerate the session id
         *
         * @param string
         * @access public
         * @return boolean
         */
        public function regenerate_id($delete_old_session = FALSE) {
                return session_regenerate_id($delete_old_session);
        }

        /*------------------------------Getter------------------------------*/

        /**
         * get_data
         *
         * Get the session data
         *
         * @param string
         * @access public
         * @return string
         */
        public function get_data($key) {
                return isset($_SESSION[$key]) ? $_SESSION[$key] : FALSE ;
        }

        /**
         * get_all_data
         *
         * Get all the session data
         *
         * @access public
         * @return array
         */
        public function get_all_data() {
                return $_SESSION;
        }

        /**
         * get_id
         *
         * Get the session id
         *
         * @access public
         * @return string
         */
        public function get_id() {
                return session_id();
        }

        /**
         * get_name
         *
         * Get the session name
         *
         * @access public
         * @return string
         */
        public function get_name() {
                return session_name();
        }

        /*------------------------------Setter------------------------------*/

        /**
         * set_id
         *
         * Set the session id
         * This function can be used before using start() only!
         *
         * @param string
         * @access public
         * @return void
         */
        public function set_id($id) {
                session_id($id);
                return $this->commit();
        }

        /**
         * set_name
         *
         * Set the session name
         * This function can be used before using start() only!
         *
         * @param string
         * @access public
         * @return void
         */
        public function set_name($name = '') {
                session_name($name);
                return $this->commit();
        }

        /**
         * set_data
         *
         * Set the session data
         * ex: set_userdata(array(1 => 'a', 2 => 'b'))
         *           set_userdata(1 => 'a')
         *
         * @param string
         * @param string
         * @access public
         * @return void
         */
        public function set_userdata($data = array(), $value = '')
        {
                if ( is_string($data) ) {
                        $_SESSION[$data] = $value;
                        return;
                }

                if ( count($data) > 0 ) {
                        foreach ( $data as $key => $val )
                        {
                                $_SESSION[$key] = $val;
                        }
                }

                $this->commit();
                return;
        }
}

/* End of file My_Session.php */

当然,如果大家喜欢用$_SESSION也完全没有问题。


评分

参与人数 1威望 +5 收起 理由
Hex + 5 赞一个!

查看全部评分

发表于 2013-1-10 22:13:52 | 显示全部楼层
尽量少用session,多用cookie,现在的开发很多部署到现网以后都是多台服务器的,session不同步会很蛋疼。sae就是这样,不推荐使用session。
发表于 2013-1-11 09:43:38 | 显示全部楼层
levin 发表于 2013-1-10 22:13
尽量少用session,多用cookie,现在的开发很多部署到现网以后都是多台服务器的,session不同步会很蛋疼。sa ...

session 放memcache 里还会出现这个问题吗?
发表于 2013-1-14 14:32:57 | 显示全部楼层
Uyson 发表于 2013-1-11 09:43
session 放memcache 里还会出现这个问题吗?

一台memcache服务器的话当然不会,但是也要考虑memcache是多台呢?实际上php的session也会在客户端种一个cookie来标记这个sessionid的,反正都需要利用cookie,何苦给服务器加大压力,最好的方式还是加密cookie,安全性和效率都有保证。
发表于 2013-1-15 09:56:47 | 显示全部楼层
可以用Hex写的那个嘛...
发表于 2013-1-15 10:01:18 | 显示全部楼层
levin 发表于 2013-1-14 14:32
一台memcache服务器的话当然不会,但是也要考虑memcache是多台呢?实际上php的session也会在客户端种一个 ...

很多人反映用 cookie 会有各种各样奇怪的问题,所以只好采用服务器存储session了。。
其实我个人也认为用纯cookie会有很多优势。
 楼主| 发表于 2013-2-22 17:36:50 | 显示全部楼层
levin 发表于 2013-1-10 22:13
尽量少用session,多用cookie,现在的开发很多部署到现网以后都是多台服务器的,session不同步会很蛋疼。sa ...

我的意见就是  需要保密的 和  会影响程序正常运行的 应该放在session里面, 其他尽量放在cookie里面。
 楼主| 发表于 2013-2-22 17:40:31 | 显示全部楼层
Hex 发表于 2013-1-15 10:01
很多人反映用 cookie 会有各种各样奇怪的问题,所以只好采用服务器存储session了。。
其实我个人也认为用 ...

感谢大神来看我的文章。
发表于 2014-10-30 11:18:24 | 显示全部楼层
levin 发表于 2013-1-14 14:32
一台memcache服务器的话当然不会,但是也要考虑memcache是多台呢?实际上php的session也会在客户端种一个 ...

能不坑么。多台memcache就不同了么。。。

本版积分规则