`

关于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框架学习概要总结

    9.CI框架学习-实例操作发表文章之CI框架文件上传类与缩略图类使用 10.CI框架学习-实例操作查看文章CI分页类使用与自定义与AR类连贯操作 11.CI框架学习-实例操作CI自带验证码使用与如何扩展自定义类库(验证码) 12.C...

    CI框架Session.php源码分析

    CI的Session并不是原生的session,正是我前面所有的cookie based session,另外,CI可以根据用户选择配置是否将session存入数据库中,本人很喜欢这个功能,还有就是“闪出数据”的功能,既闪出数据只是对下次服务器...

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

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

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

    很多程序员在CI中使用session的时候,开启自动加载session之后网站就报错了,这篇文章主要介绍了CI框架自动加载session出现报错的解决办法,需要的朋友可以参考下

    C语言头文件 SESSION

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

    ci表单验证

    代码写的不是很简洁,大家可以精简代码。这些代码只是简单实现了“注册、登录、验证、Session”的使用,仅供 CI 新手学习使用。

    同浏览器不同窗口不同用户Session问题

    正对java Web项目,同浏览器同时打开两个登录窗口(不同Tag),用不同用户登录,为避免使用同一个Session,需要使用这段代码。否则先登录的用户的Session会变成后登录用户的Session.相关系统使用权限也会变。

    解决springboot实现跨域session共享问题

    解决springboot实现跨域session共享问题,防止sql注入。可以更有效的解决token问题,欢迎下载,有问题可以再评论下方留言,及时解答!!加群:687942640

    微信小程序实现Session功能及无法获取session问题的解决方法

    因为小程序原生不支持Cookie,因此也不支持Session。 网上找到的的一些方法有缺陷,而且很多累赘,估计没有实际测试过,在此直接给出实测可用的代码。 大概思路就是借助小程序本地储存+网络请求的header可读可写来...

    iframe 跨域访问session

    iframe 跨域访问session问题解决方法

    codeigniter兼容Session

    codeigniter兼容Session

    dwz框架实现拦截器 session超时跳转登陆页面

    dwz框架实现拦截器 session超时跳转登陆页面 DWZ框架 struts2拦截器 session超时

    CI框架安全类Security.php源码分析

    之前我们分析了CI框架的session类session.php,本文我们继续分析CI框架的安全类security.php文件,方便我们更详细的了解CI框架,从而更熟练的应用CI框架

    关于session.doc

    关于session.doc关于sessio关于session.docn.doc

    session驱动类 session存入数据库

    session驱动类 session存入数据库 数据库存储session 用于session存入数据库

    完美解决ajax访问遇到Session失效的问题

    现在Ajax在Web项目中应用广泛,几乎可以说无处不在,这就带来另外一个问题:当Ajax请求遇到Session超时,应该怎么办? 显而易见,传统的页面跳转在此已经不适用,因为Ajax请求是XMLHTTPRequest对象发起的而不

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

    主要介绍了CI框架(CodeIgniter)操作redis的方法,结合实例形式详细分析了CodeIgniter框架针对redis数据库操作的相关配置与使用技巧,需要的朋友可以参考下

    解析php框架codeigniter中如何使用框架的session

    2是codeigniter这个框架的一个方法:下面就详细讲解如何使用这个有点点复杂的方法:首先,在\ci\application\config下面的config.php文件中找到:$config[‘encryption_key’] = ”;这个里面随便填什么值都可以,...

Global site tag (gtag.js) - Google Analytics