最近使用codeingiter框架,发现默认的session 不是很好用,以下是用法总结:使用的是2.0.2的版本

1.扩展自带的session类:application/libraries/MY_session.php 新增的扩展文件

  1. <?php if (!defined('BASEPATH')) exit('No direct script access allowed');
  2. /**
  3. * Session class using native PHP session.
  4. *
  5. * @package CodeIgniter
  6. * @subpackage Libraries
  7. * @category Sessions
  8. * @author Yvo van Dillen
  9. * @link http://www.atomicon.nl
  10. */
  11.  
  12. /*
  13. Example config file: session.php
  14.  
  15. <?php
  16.  
  17. //The session name (leave empty for cross application sessions)
  18. $config['sess_name'] = '';
  19.  
  20. //Time to expire a session AND/OR regenerate the session id
  21. $config['sess_expiration'] = 7200;
  22.  
  23. //If you want to change the session id every 'sess_expiration' seconds
  24. //turn this to true
  25. $config['sess_regenerate'] = FALSE;
  26.  
  27. //The flashdata key (this only applies to flashmessages)
  28. $config['sess_flash_key'] = 'flash';
  29.  
  30. */
  31.  
  32. class MY_Session
  33. {
  34. function __construct()
  35. {
  36. log_message('debug', "MY_Session Class Initialized");
  37. get_instance()->load->config('session', FALSE, TRUE);
  38. $this->_sess_run();
  39. }
  40.  
  41. function data()
  42. {
  43. return $_SESSION;
  44. }
  45.  
  46. /**
  47. * Regenerates session id
  48. */
  49. function regenerate_id()
  50. {
  51. // copy old session data, including its id
  52. $old_session_id = session_id();
  53. $old_session_data = isset($_SESSION) ? $_SESSION : array();
  54.  
  55. // regenerate session id and store it
  56. session_regenerate_id();
  57. $new_session_id = session_id();
  58.  
  59. // switch to the old session and destroy its storage
  60. if (session_id($old_session_id))
  61. {
  62. session_destroy();
  63. }
  64.  
  65. // switch back to the new session id and send the cookie
  66.  
  67. if ($new_session_id)
  68. {
  69. session_id($new_session_id);
  70. session_start();
  71.  
  72. // restore the old session data into the new session
  73. $_SESSION = $old_session_data;
  74. }
  75.  
  76. // end the current session and store session data.
  77. session_write_close();
  78. }
  79.  
  80. /**
  81. * Destroys the session and erases session storage
  82. */
  83. function destroy()
  84. {
  85. $_SESSION = array();
  86. if ( isset( $_COOKIE[session_name()] ) )
  87. {
  88. setcookie(session_name(), '', time()-, '/');
  89. }
  90. session_destroy();
  91. }
  92.  
  93. function sess_create()
  94. {
  95. $this->_sess_run();
  96. }
  97.  
  98. function sess_destroy()
  99. {
  100. $this->destroy();
  101. }
  102.  
  103. /**
  104. * Reads given session attribute value
  105. */
  106. function userdata($item)
  107. {
  108. if($item == 'session_id'){ //added for backward-compatibility
  109. return session_id();
  110. }else{
  111. return ( ! isset($_SESSION[$item])) ? false : $_SESSION[$item];
  112. }
  113. }
  114.  
  115. public function all_userdata()
  116. {
  117. return (array)$_SESSION;
  118. }
  119.  
  120. /**
  121. * Sets session attributes to the given values
  122. */
  123. function set_userdata($newdata = array(), $newval = '')
  124. {
  125. if (is_string($newdata))
  126. {
  127. $newdata = array($newdata => $newval);
  128. }
  129.  
  130. if (count($newdata) > )
  131. {
  132. foreach ($newdata as $key => $val)
  133. {
  134. $_SESSION[$key] = $val;
  135. }
  136. }
  137. }
  138.  
  139. /**
  140. * Erases given session attributes
  141. */
  142. function unset_userdata($newdata = array())
  143. {
  144. if (is_string($newdata))
  145. {
  146. $newdata = array($newdata => '');
  147. }
  148.  
  149. if (count($newdata) > )
  150. {
  151. foreach ($newdata as $key => $val)
  152. {
  153. unset($_SESSION[$key]);
  154. }
  155. }
  156. }
  157.  
  158. /**
  159. * Starts up the session system for current request
  160. */
  161. function _sess_run()
  162. {
  163. if (config_item('sess_name'))
  164. {
  165. session_name(config_item('sess_name'));
  166. }
  167.  
  168. if (session_id()=='')
  169. {
  170. session_start();
  171. }
  172.  
  173. // check if session id needs regeneration
  174. if ( $this->_session_id_expired() )
  175. {
  176. // regenerate session id (session data stays the
  177. // same, but old session storage is destroyed)
  178. if (config_item('sess_regenerate'))
  179. {
  180. $this->regenerate_id();
  181. return;
  182. }
  183. }
  184.  
  185. // delete old flashdata (from last request)
  186. $this->_flashdata_sweep();
  187.  
  188. // mark all new flashdata as old (data will be deleted before next request)
  189. $this->_flashdata_mark();
  190. }
  191.  
  192. /**
  193. * Checks if session has expired
  194. */
  195. function _session_id_expired()
  196. {
  197. $sess_expiration = config_item('sess_expiration');
  198. if (is_numeric($sess_expiration) && $sess_expiration > )
  199. {
  200. if (config_item('sess_regenerate'))
  201. {
  202. if ( !isset($_SESSION['_sess:last-generated']) )
  203. {
  204. $_SESSION['_sess:last-generated'] = time();
  205. return false;
  206. }
  207. else
  208. {
  209. $expiry_time = $_SESSION['_sess:last-generated'] + $sess_expiration;
  210. if (time() >= $expiry_time)
  211. {
  212. return true;
  213. }
  214. }
  215. }
  216. else
  217. {
  218. if (isset($_SESSION['_sess:last-activation']))
  219. {
  220. $expiry_time = $_SESSION['_sess:last-activation'] + $sess_expiration;
  221. if (time() >= $expiry_time)
  222. {
  223. $this->destroy();
  224. return true;
  225. }
  226. }
  227. $_SESSION['_sess:last-activation'] = time();
  228. }
  229. }
  230. return false;
  231. }
  232.  
  233. /**
  234. * Sets "flash" data which will be available only in next request (then it will
  235. * be deleted from session). You can use it to implement "Save succeeded" messages
  236. * after redirect.
  237. */
  238. function set_flashdata($key, $value)
  239. {
  240. $flash_key = config_item('sess_flash_key').':new:'.$key;
  241. $this->set_userdata($flash_key, $value);
  242. }
  243.  
  244. /**
  245. * Keeps existing "flash" data available to next request.
  246. */
  247. function keep_flashdata($key)
  248. {
  249. $old_flash_key = config_item('sess_flash_key').':old:'.$key;
  250. $value = $this->userdata($old_flash_key);
  251.  
  252. $new_flash_key = config_item('sess_flash_key').':new:'.$key;
  253. $this->set_userdata($new_flash_key, $value);
  254. }
  255.  
  256. /**
  257. * Returns "flash" data for the given key.
  258. */
  259. function flashdata($key)
  260. {
  261. $flash_key = config_item('sess_flash_key').':old:'.$key;
  262. return $this->userdata($flash_key);
  263. }
  264.  
  265. /**
  266. * PRIVATE: Internal method - marks "flash" session attributes as 'old'
  267. */
  268. function _flashdata_mark()
  269. {
  270. foreach ($_SESSION as $name => $value)
  271. {
  272. $parts = explode(':new:', $name);
  273. if (is_array($parts) && count($parts) == )
  274. {
  275. $new_name = config_item('sess_flash_key').':old:'.$parts[];
  276. $this->set_userdata($new_name, $value);
  277. $this->unset_userdata($name);
  278. }
  279. }
  280. }
  281.  
  282. /**
  283. * PRIVATE: Internal method - removes "flash" session marked as 'old'
  284. */
  285. function _flashdata_sweep()
  286. {
  287. foreach ($_SESSION as $name => $value)
  288. {
  289. $parts = explode(':old:', $name);
  290. if (is_array($parts) && count($parts) == && $parts[] == config_item('sess_flash_key'))
  291. {
  292. $this->unset_userdata($name);
  293. }
  294. }
  295. }
  296. }

2.在控制器中使用方法:

设置session:注意 如果把 数组赋给一个变量,则不起效果

  1. $this->session->set_userdata(array(
  2. 'authorization' => array(
  3. 'id' => ,
  4. 'code' => '',
  5. )
  6. ));

3.获取session:

  1. print_r( $this->session->userdata('authorization') ) ;

CI session 类的用法的更多相关文章

  1. Hibernate 系列 05 - Session 类

    引导目录: Hibernate 系列教程 目录 前言: Session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库的存取都与Session息息相关. 就如同在编写JDBC时需要关 ...

  2. Spring MVC中Session的正确用法<转>

    Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的 ...

  3. C#中timer类的用法

    C#中timer类的用法 关于C#中timer类  在C#里关于定时器类就有3个   1.定义在System.Windows.Forms里   2.定义在System.Threading.Timer类 ...

  4. C#正则表达式Regex类的用法

    C#正则表达式Regex类的用法 更多2014/2/18 来源:C#学习浏览量:36891 学习标签: 正则表达式 Regex 本文导读:正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串, ...

  5. 标准C++中的string类的用法总结

    标准C++中的string类的用法总结 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有 ...

  6. 【转】Spring MVC中Session的正确用法之我见

    Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的 ...

  7. Session 类

     Session 类 Session 类可以使用户在浏览您的网站时,维持他们的状态并跟踪他们的行为. Session 类将每个用户的 session 信息序列化(serialize)后存储到到 coo ...

  8. android中Handle类的用法

    android中Handle类的用法 当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无 ...

  9. Handle类的用法

    android中Handle类的用法 当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无 ...

随机推荐

  1. C# 文件操作(摘抄)

    ——选自<c# 编程兵书>第11章 张志强 胡君 编著 11 文件操作概述 11.1 驱动器 在Windows操作系统中,存储介质统称为驱动器,硬盘由于可以划分为多个区域,每一个区域称为一 ...

  2. 编写UI自动化测试用例原则

    1.一个脚本是一个完整的场景,从用户登陆操作到用户退出系统关闭浏览器.2.一个脚本脚本只验证一个功能点,不要试图用户登陆系统后把所有的功能都进行验证再退出系统3.尽量只做功能中正向逻辑的验证,不要考虑 ...

  3. java 配置信息类 Properties 的简单使用

    Properties :(配置信息类) 是一个表示持久性的集合 ,继承 Hashtable ,存值是以键-值得方式  主要用于生产配置文件和读取配置文件信息. 简单的实例: import java.i ...

  4. leetcode375 Guess Number Higher or Lower II

    思路: dp. https://leetcode.com/problems/guess-number-higher-or-lower-ii/discuss/ 实现: class Solution { ...

  5. WEB-CSS实现单行(多行)文本溢出显示省略号

    //单行文本溢出部分隐藏显示省略号...overflow: hidden; text-overflow:ellipsis; white-space: nowrap; /** n 行文本溢出部分隐藏显示 ...

  6. Xcode 动态库及Framework 安装路径设置

    使用Xcode开发动态库及Framework时,需要为其设置Install path.在设置Install path时,可能会使用到以下几个路径: 1)绝对路径:               绝对路径 ...

  7. 【译】x86程序员手册28-7.7任务地址空间

    7.7 Task Address Space 任务地址空间 The LDT selector and PDBR fields of the TSS give software systems desi ...

  8. Oracle+struts2实现用户登入并显示访问次数

    实体类: package entity; public class userfo { private int id;//id private String name;//用户名 private Str ...

  9. docker常用命令理解

    docker help Commands: attach Attach local standard input, output, and error streams to a running con ...

  10. 初步认识MVC

     一丶路由(One) 自定义路由,静态路由,动态路由,组合路由 routes.MapRoute 二丶Action向View传值的四种方式(ViewData.ViewBag.TempData.Model ...