关于CI框架 Session 的有关问题的 不可思议

关于CI框架 Session 的问题的 不可思议

关于CI框架 Session 的问题的 不可思议

 

老实说 在网上验证了很久,查了很久,以及同相关朋友互相沟通,都很费解 其作者究竟是如何思考的...

 

为什么 在session支持上竟走上了这么一个曲线...

 

不理解... 没办法,只能改写吧.... 让其回到正轨...

 

 

留言如此,备忘后记.... 

 

 

CI 并不是乐土,框架选型 ... 慎重....

 

 

贴出自己的 session类吧... 无奈的选择啊...

<?php
/**
 * 因为 CI框架库自身对Session支持的问题,使得 服务器端Session存储竟然
 * 依赖 客户端浏览器 ,无语... 个人对CI开发者无语...
 * 
 * 不知道其具体是怎么想的..
 * 
 * @author 色色 vb2005xu.iteye.com
 *
 */
class My_Session {

	private static $key_userdata = '#userdata+-';
	private static $key_flashmem = '#flashmem+-';
	
	function __construct(){
		if (!headers_sent()){ session_start();}
	}
	
	function __destruct(){
		// 析构函数,删除 flashmem
		if (isset($_SESSION[self::$key_flashmem])){
			unset($_SESSION[self::$key_flashmem]);
		}
	}
	
	function userdata($item){
		$D = isset($_SESSION[self::$key_userdata]) ? $_SESSION[self::$key_userdata] : FALSE;
		return $D && is_array($D) && isset($D[$item]) ? $D[$item] : FALSE;
	}
	
	private function init_userdata(){
		if (isset($_SESSION[self::$key_userdata]) && is_array($_SESSION[self::$key_userdata]))
			return true;
		$_SESSION[self::$key_userdata] = array();
	}
	
	function set_userdata($newdata = array(), $newval = ''){
		
		$this->init_userdata();
		
		if (is_string($newdata))
		{
			$newdata = array($newdata => $newval);
		}

		if (count($newdata) > 0)
		{
			foreach ($newdata as $key => $val)
			{
				$_SESSION[self::$key_userdata][$key] = $val;
			}
		}
	}
	
	function unset_userdata($newdata = array())
	{
		
		$this->init_userdata();
		
		if (is_string($newdata))
		{
			$newdata = array($newdata => '');
		}

		if (count($newdata) > 0)
		{
			foreach ($newdata as $key => $val)
			{
				unset($_SESSION[self::$key_userdata][$key]);
			}
		}
	}
	
	function all_userdata()
	{
		return isset($_SESSION[self::$key_userdata]) ? $_SESSION[self::$key_userdata]:FALSE;
	}
	
	function sess_destroy(){
//		THROW NEW EXCEPTION('D');
		session_destroy();
	}	

	private function init_flashdata(){
		if (isset($_SESSION[self::$key_flashmem]) && is_array($_SESSION[self::$key_flashmem]))
			return true;
		$_SESSION[self::$key_flashmem] = array();
	}
	
	function set_flashdata($newdata = array(), $newval = '')
	{
		$this->init_flashdata();
		
		if (is_string($newdata))
		{
			$newdata = array($newdata => $newval);
		}

		if (count($newdata) > 0)
		{
			foreach ($newdata as $key => $val)
			{
				$_SESSION[self::$key_flashmem][$key] = $val;
			}
		}
	}
	
	function flashdata($item)
	{
		$D = isset($_SESSION[self::$key_flashmem]) ? $_SESSION[self::$key_flashmem] : FALSE;
		return $D && is_array($D) && isset($D[$item]) ? $D[$item] : FALSE;
	}
	
}
 
1 楼 xiaoshenge 2012-02-20  
看到标题,和内容不知道 作者所说的
因为 CI框架库自身对Session支持的问题,使得 服务器端Session存储竟然
* 依赖 客户端浏览器 ,无语... 个人对CI开发者无语...

是什么意思?