菜B陈 L-Player 发表于 2013-1-6 00:00:47

我重写的session类

我不知道为什么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也完全没有问题。


levin 发表于 2013-1-10 22:13:52

尽量少用session,多用cookie,现在的开发很多部署到现网以后都是多台服务器的,session不同步会很蛋疼。sae就是这样,不推荐使用session。

Uyson 发表于 2013-1-11 09:43:38

levin 发表于 2013-1-10 22:13 static/image/common/back.gif
尽量少用session,多用cookie,现在的开发很多部署到现网以后都是多台服务器的,session不同步会很蛋疼。sa ...

session 放memcache 里还会出现这个问题吗?

levin 发表于 2013-1-14 14:32:57

Uyson 发表于 2013-1-11 09:43 static/image/common/back.gif
session 放memcache 里还会出现这个问题吗?

一台memcache服务器的话当然不会,但是也要考虑memcache是多台呢?实际上php的session也会在客户端种一个cookie来标记这个sessionid的,反正都需要利用cookie,何苦给服务器加大压力,最好的方式还是加密cookie,安全性和效率都有保证。

lamtin 发表于 2013-1-15 09:56:47

可以用Hex写的那个嘛...

Hex 发表于 2013-1-15 10:01:18

levin 发表于 2013-1-14 14:32 static/image/common/back.gif
一台memcache服务器的话当然不会,但是也要考虑memcache是多台呢?实际上php的session也会在客户端种一个 ...

很多人反映用 cookie 会有各种各样奇怪的问题,所以只好采用服务器存储session了。。
其实我个人也认为用纯cookie会有很多优势。

菜B陈 L-Player 发表于 2013-2-22 17:36:50

levin 发表于 2013-1-10 22:13 static/image/common/back.gif
尽量少用session,多用cookie,现在的开发很多部署到现网以后都是多台服务器的,session不同步会很蛋疼。sa ...

我的意见就是需要保密的 和会影响程序正常运行的 应该放在session里面, 其他尽量放在cookie里面。

菜B陈 L-Player 发表于 2013-2-22 17:40:31

Hex 发表于 2013-1-15 10:01 static/image/common/back.gif
很多人反映用 cookie 会有各种各样奇怪的问题,所以只好采用服务器存储session了。。
其实我个人也认为用 ...

感谢大神来看我的文章。

loadinger 发表于 2014-10-30 11:18:24

levin 发表于 2013-1-14 14:32
一台memcache服务器的话当然不会,但是也要考虑memcache是多台呢?实际上php的session也会在客户端种一个 ...

能不坑么。多台memcache就不同了么。。。
页: [1]
查看完整版本: 我重写的session类