`

关于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;
	}
	
}
 
分享到:
评论
3 楼 virel 2014-08-15  
呵呵一笑
2 楼 Paull 2013-07-11  
虽然走了个曲线,但是也有可取之处,可以很大程度上防止跨站攻击。
色色担心的是被解密或cookie的4K限制么?还是因为禁用cookie=禁用session?
1 楼 xiaoshenge 2012-02-20  
看到标题,和内容不知道 作者所说的
因为 CI框架库自身对Session支持的问题,使得 服务器端Session存储竟然
* 依赖 客户端浏览器 ,无语... 个人对CI开发者无语...

是什么意思?

相关推荐

    CI框架Session.php源码分析

    CI框架的Session管理是其核心功能之一,它提供了一种高效且灵活的方式来处理用户会话。不同于PHP原生的session机制,CI的Session系统是基于cookie的,但可以通过配置选项将其存储在数据库中,增强了数据的安全性和可...

    ci框架详解

    提供的"ci框架 2.0中文手册.chm"是CI框架2.0版本的官方中文文档,涵盖了框架的所有组件和功能,包括安装、配置、数据库操作、视图和模板、表单验证、错误处理等,是学习和使用CI框架的重要参考资料。 总结,CI框架...

    ci框架规范 参考

    本规范主要关注在使用CI框架时的编码风格和组织结构,旨在提升团队协作效率,减少后期维护成本。 1. **目录结构**: CI框架遵循MVC(Model-View-Controller)模式,其标准目录结构包括`system`(包含框架核心及...

    php CI学习框架

    #### 一、CI框架概述 - **定义**:CodeIgniter (简称CI) 是一个简洁而强大的PHP Web开发框架,它轻量级且具备丰富的类库资源,支持MVC(Model-View-Controller)设计模式。 - **特性**: - **小巧**:框架体积小,...

    CodeIgniter-CI框架-指南 初学必读

    CI框架内置了错误处理和日志记录功能,方便调试和排查问题。 **九、安全与最佳实践** 了解如何正确使用Session、CSRF保护、加密服务等,以及如何避免常见的安全漏洞,是使用CI框架的重要环节。 **十、扩展与第三方...

    CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)

    本文实例总结了CI框架常用经典操作类。分享给大家供大家参考,具体如下: 1. 超级对象中的URI CI_URI类的解析url的相关信息 直接使用$this-&gt;uri可以使用它的相关属性 system/core/URI.php文件中 部分常用属性: (1) ...

    CI框架实现cookie登陆的方法详解

    在CI(CodeIgniter)框架中...开发者应当熟练掌握CI框架提供的相关类库和方法,并且注重实现过程中的安全问题,确保用户数据的安全。通过本文的介绍,希望读者能够更好地理解和掌握CI框架中实现基于cookie登录的方法。

    php ci开发基础应用

    在IT行业中,PHP CI(CodeIgniter)框架是开发者常用的一种轻量级、高效能的PHP框架,尤其适合初学者进行Web应用开发。本篇主要介绍`PHP CI开发基础应用`,并结合提供的`MY_Controller.php`文件名称,探讨CI框架的...

    CI框架自动加载session出现报错的解决办法

    总的来说,遇到CI框架中自动加载Session报错时,关键在于确保设置了正确的加密密钥。如果问题依旧存在,那么可能需要检查更多的配置项,或者查看CodeIgniter的官方文档来获取更详细的帮助。通过合理的配置和维护,...

    ci学习笔记源码及数据库

    下面将详细探讨这两个文件与CI框架的相关知识点。 `cishop.sql`文件通常是数据库的备份或导出文件,它包含了一整个数据库的结构、数据以及相关的SQL语句。在CI框架中,数据库操作是通过其内置的数据库库来实现的,...

    CI开发的小型电商

    CI可能使用session或cookie来实现购物车功能,允许用户添加、修改、删除商品,以及计算总价。 6. **支付集成**:为了完成交易,项目可能已经整合了第三方支付接口,如支付宝、微信支付等,这涉及到API调用和回调...

    CI框架(CodeIgniter)操作redis的方法详解

    标题中提到的CI框架(CodeIgniter)是一种使用PHP语言开发的轻量级MVC框架,而redis是一种基于键值对的NoSQL数据库。标题中的“操作redis的方法详解”表明本文将详细阐述如何在CodeIgniter框架中使用redis数据库进行...

    php框架学习笔记.doc

    PHP框架学习笔记 PHP框架学习笔记是学习PHP框架的重要笔记,涵盖了CI...CI框架学习笔记涵盖了CI框架的基础知识点,包括控制器、模型、视图、URI路由、数据库操作、表单提交、上传文件、Session管理等方面的知识点。

    codeigniter兼容Session

    然后查看CodeIgniter的日志文件(`application/logs/`),它们可能包含关于Session问题的线索。 总之,理解和掌握CodeIgniter的Session机制对于开发健壮的Web应用程序至关重要。正确配置和使用Session可以提高用户...

    codeigniter-3.0.0-中文手册/ci3.0手册

    CodeIgniter提供了错误处理和日志记录功能,便于调试和问题排查。 13. **安全**: - 包括输入验证、XSS过滤、防止SQL注入、CSRF防护等,CodeIgniter提供了一套工具来确保应用的安全性。 14. **性能优化**: - ...

    C语言头文件 SESSION

    C语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言...

    关于session丢失问题

    然而,Session丢失问题是一个常见的技术挑战,可能导致用户在使用过程中频繁地重新登录或者丢失相关信息。以下是对这个问题的详细分析和解决策略。 首先,我们需要理解Session丢失的常见原因: 1. **Cookie被禁用...

Global site tag (gtag.js) - Google Analytics