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


Posted in PHP onJune 24, 2013

里面有两种session的使用方法:
1是php的原始的session使用方法,这个很简单,$_SESSION['name']="name",然后在需要的地方显示:echo $_SESSION['name'];
2是codeigniter这个框架的一个方法:
下面就详细讲解如何使用这个有点点复杂的方法:
首先,在\ci\application\config下面的config.php文件中找到:$config['encryption_key'] = '';这个里面随便填什么值都可以,但是不能为空。一般是英文啊,不要钻牛角尖。
接着在\ci\application\config下面的auto.php文件中找到:$autoload['libraries'] = array('');里面要填写:$autoload['libraries'] = array('session');或者在适当的地方如control文件夹里面的相应文件中(一般是在构造方法中)写:$this->load->library('session');这样也行。
现在环境配置好了,现在就是写代码了:
在需要放入session的地方写:
$this->session->set_userdata('name','yang');
这样session里面就有了值了。
显示值:
echo $this->session->userdata('name');
如果是array,则:
$newdata = array(
                   'username'  => 'johndoe',
                   'email'     => 'johndoe@some-site.com',
                   'logged_in' => TRUE
               );
$this->session->set_userdata($newdata);
以下是转载的别人的详细的有点废话的相关知识:
Sessions会在每个页面载入后开始运行,所以session类必须首先被初始化。

1、您可以在控制器中初始化,也可以在系统中自动加载(译者注:在autoload.php设定)$autoload['libraries'] = array('session');

2、要在您的控制器构造函数中初始化session类,您可以使用 $this->load->library 函数:$this->load->library('session');一旦被载入, session就可以这样使用: $this->session。
session类的绝大部分都会在后台运行,所以初始化session时,它session数据会被自动读取、创建和更新。

Sessions 是怎样工作的?
需要知道的非常重要的一点就是,session类一旦被初始化,它就会自动运行。对于后面的事情,您可以完全不作理会。正如您将会在下面看到的一样,您可以正常使用session来工作,甚至还可以添加自己的session数据,而在这一切的过程中,读、写和更新的操作都是自动完成的。

当页面载入后,session类就会检查用户的cookie中是否存在有效的session数据。如果session数据不存在(或者已经过期),那么就会创建一个新的session并把他保存在cookie中。如果session数据存在,那么他的信息就会被更新,同时cookie也会被同时更新。每次更新都会重新生成session_id的值。

默认情况下, Session Cookie 每隔 5 分钟才会更新一次,这样会减少对处理器的负荷。如果你重复的装载页面, 你会发现"上次活动"的时间在五分钟,或多余五分钟的时候才会变化,也就是 cookie上次被写入的时间。 这个时间可以通过设置 application/config/config.php 文件里的 $config['sess_time_to_update'] 行来改变。

一个 session 是由一个包括下列信息的数组组成的:
唯一的用户Session ID (这是一个平均信息量统计出来的非常坚固的随机字符串,使用MD5加密,默认是每五分钟就重新生成一次。
用户的 IP 地址
用户浏览器信息(取前50个字符)
最新的一个活跃时间戳.
以上数据将会用以下数组格式序列化并存到cookie里:

[array]
(
     'session_id'    => random hash,
     'ip_address'    => 'string - user IP address',
     'user_agent'    => 'string - user agent data',
     'last_activity' => timestamp
)

1、取得 Session 数据:
可以通过如下的函数来得到 session 数组的任何信息:
$this->session->userdata('item');
item 是数组里的相对应数据的索引。例如,想要获得 session ID, 你要使用如下的代码:
$session_id = $this->session->userdata('session_id');
注意: 如果你的目标数据不存在的话,这个函数会返回 FALSE (布尔值boolean)。

2、添加自定义的 Session 数据:
假设,有个特定用户登陆到你的网站, 当他通过检测后 你可以添加他的用户名和电子邮件到 session cookie 中,这些信息可以在不去访问数据库的情况下,当成全局量来使用。
通过以下函数,你可以传递一个新的用户数组到 session 数组中:
$this->session->set_userdata($array);
$array 是一个结合数组,用来存储你的新数据。例如 :

$newdata = array(
                   'username'  => 'johndoe',
                   'email'     => 'johndoe@some-site.com',
                   'logged_in' => TRUE
               );
$this->session->set_userdata($newdata);

如果使用下面 set_userdata()函数的写法,可以每次只添加一个用户数据。
$this->session->set_userdata('some_name', 'some_value');
注意: Cookies 只能存储 4KB 的数据, 使用时要小心超出它的容量。特别指出的是,加密会产生比原数据更长的数据字符串,所以一定要当心你要存放数据的大小。

3、删除 Session 数据:正如使用 set_userdata() 是用来添加信息到 session 中,而通过向unset_userdata() 函数中传递 session key 可以用来删除这些信息。例如, 你想要从 session 信息里去掉 'some_name':
$this->session->unset_userdata('some_name');
也可以给这个函数传一个要删除项的关联数组。
$array_items = array('username' => '', 'email' => '');
$this->session->unset_userdata($array_items);

4、将 Session 数据存入数据库:
当session 数据在数据库中可用时,每当从用户cookie中发现一个有效的session,一个数据库查询就会被执行以匹配它。如果 session ID 不相配,session 就会被销毁。Session ID永远不会更新,它们只会在一个新的会话创建时生成。
为了存储session,你必须先创建一个数据表。这是 session 类所需的基本结构(用于MySQL的):

CREATE TABLE IF NOT EXISTS `ci_sessions` ( 
session_id varchar(40) DEFAULT '0' NOT NULL, 
ip_address varchar(16) DEFAULT '0' NOT NULL, 
user_agent varchar(50) NOT NULL,
last_activity int(10) unsigned DEFAULT 0 NOT NULL,
user_data text DEFAULT '' NOT NULL, 
PRIMARY KEY (session_id) );

一旦启用了,Session类就会在数据库中存储session数据。
同时确保你已经在配置文件中指定了数据表名:$config['sess_table_name'] = 'ci_sessions';
注意: 默认情况下这个表叫做 ci_sessions, 但是你可以给它指定任意名字,只要你更新了 application/config/config.php 文件以确保它包含了你所起的名字。一旦你创建了数据表,你就可以像下面这样在config.php文件中启用数据库选项:
$config['sess_use_database'] = TRUE;
注意: Session类已经内置了清除过期session的垃圾回收机制,因此你不需要编写你自己的事务来做这个。

5、销毁 Session
要清除当前 session:$this->session->sess_destroy();
Session 的参数

6、你可以在application/config/config.php 文件中找到以下的 Session 相关的参数:
参数     默认     选项     描述
sess_cookie_name     ci_session     无     你想要保存 Session Cookie 的名字。
sess_expiration     7200     无     session 持续的秒数。默认是2个小时(7200秒)。如果将这个数值设为: 0,就可以得到 永久 session。
sess_expire_on_close     FALSE     TRUE/FALSE (boolean)     这个选项决定当浏览器窗口关闭时是否自动使session过期。
sess_encrypt_cookie     FALSE     TRUE/FALSE (布尔值boolean)     是否对 session 数据加密.
sess_use_database     FALSE     TRUE/FALSE (布尔值boolean)     是否将 session 数据存放入数据库中。在开启这个选项前,你要先创建一个数据库表。
sess_table_name     ci_sessions     任何有效的 SQL 表名     session 数据库表的名字。
sess_time_to_update     300     时间以秒计算     这个选项控制 session 类多久会产生一个新的session 和 session id。
sess_match_ip     FALSE     TRUE/FALSE (布尔值boolean)     是否通过用户的IP地址来读取 session 的数据。 注意 ,有些网络运行商 ISPs 会动态的改变IP, 所以将这个选项设为 FALSE, 才有可能得到永久的 session。
sess_match_useragent     TRUE     TRUE/FALSE (布尔值boolean)     是否要按照对应的 User Agent 来读取 session 数据。

PHP 相关文章推荐
做个自己站内搜索引擎
Oct 09 PHP
php遍历所有文件及文件夹的方法深入解析
Jun 08 PHP
页面乱码问题的根源及其分析
Aug 09 PHP
PHP中的traits实现代码复用使用实例
May 13 PHP
thinkPHP下的widget扩展用法实例分析
Dec 26 PHP
Symfony生成二维码的方法
Feb 04 PHP
PHP实现的网站目录扫描索引工具
Sep 08 PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
Nov 25 PHP
PHP实现留言板功能的详细代码
Mar 25 PHP
PHP PDO操作MySQL基础教程
Jun 05 PHP
浅谈PHP中如何实现Hook机制
Nov 14 PHP
PHP数组去重的更快实现方式分析
May 09 PHP
PHP错误提示的关闭方法详解
Jun 23 #PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
Jun 23 #PHP
关于zend studio 出现乱码问题的总结
Jun 23 #PHP
php 备份数据库代码(生成word,excel,json,xml,sql)
Jun 23 #PHP
PHP获取MSN好友列表类的实现代码
Jun 23 #PHP
使用php统计字符串中中英文字符的个数
Jun 23 #PHP
php 获取本地IP代码
Jun 23 #PHP
You might like
PHP 日期加减的类,很不错
2009/10/10 PHP
PHP入门学习笔记之一
2010/10/12 PHP
PHP实现的简单日历类
2014/11/29 PHP
php获取访问者IP地址汇总
2015/04/24 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
基于JQuery的一句代码实现表格的简单筛选
2010/07/26 Javascript
JSChart轻量级图形报表工具(内置函数中文参考)
2010/10/11 Javascript
原生js实现查询天气小应用
2016/12/09 Javascript
JS实现touch 点击滑动轮播实例代码
2017/01/19 Javascript
js 转义字符及URI编码详解
2017/02/28 Javascript
JavaScript学习笔记之惰性函数示例详解
2017/08/27 Javascript
微信小程序左右滑动的实现代码
2017/12/15 Javascript
Next.js实现react服务器端渲染的方法示例
2019/01/06 Javascript
JS字典Dictionary类定义与用法示例
2019/02/01 Javascript
微信小程序调用微信支付接口的实现方法
2019/04/29 Javascript
微信小程序页面间传递数组对象方法解析
2019/11/06 Javascript
javascrpt密码强度校验函数详解
2020/03/18 Javascript
Python实现的Kmeans++算法实例
2014/04/26 Python
python字符串string的内置方法实例详解
2018/05/14 Python
在Mac下使用python实现简单的目录树展示方法
2018/11/01 Python
python Selenium实现付费音乐批量下载的实现方法
2019/01/24 Python
Django实现CAS+OAuth2的方法示例
2019/10/30 Python
python实现遍历文件夹图片并重命名
2020/03/23 Python
Python使用monkey.patch_all()解决协程阻塞问题
2020/04/15 Python
AmazeUI 评论列表的实现示例
2020/08/13 HTML / CSS
美国时尚大码女装购物网站:Avenue
2019/05/24 全球购物
华为消费者德国官方网站:HUAWEI德国
2020/11/03 全球购物
波兰多品牌运动商店:StreetStyle24.pl
2020/09/22 全球购物
铭立家具面试题
2012/12/06 面试题
家居饰品店创业计划书
2014/01/31 职场文书
面试必备的求职信
2014/05/25 职场文书
物理分数没达标检讨书
2014/09/13 职场文书
公司合作协议范文
2014/10/01 职场文书
项目验收申请报告
2015/05/15 职场文书
2016年公共机构节能宣传周活动总结
2016/04/05 职场文书
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python