解析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 相关文章推荐
手把手教你使用DedeCms的采集的图文教程
Mar 11 PHP
PHP Class&Object -- 解析PHP实现二叉树
Jun 25 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
Sep 10 PHP
Yii不依赖Model的表单生成器用法实例
Dec 04 PHP
Linux中为php配置伪静态
Dec 17 PHP
详解php设置session(过期、失效、有效期)
Nov 12 PHP
php版微信公众平台入门教程之开发者认证的方法
Sep 26 PHP
PHP获取redis里不存在的6位随机数应用示例【设置24小时过时】
Jun 07 PHP
php实现微信公众号企业转账功能
Oct 01 PHP
Yii 使用intervention/image拓展实现图像处理功能
Jun 22 PHP
PHP调用接口API封装的例子
Oct 11 PHP
分享8个Laravel模型时间戳使用技巧小结
Feb 12 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
使用eAccelerator加密PHP程序
2008/10/03 PHP
用php来改写404错误页让你的页面更友好
2013/01/24 PHP
PHP中的常见魔术方法功能作用及用法实例
2015/07/01 PHP
PHP fprintf()函数用法讲解
2019/02/16 PHP
JavaScript 判断判断某个对象是Object还是一个Array
2010/01/28 Javascript
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
jsvascript图像处理—(计算机视觉应用)图像金字塔
2013/01/15 Javascript
JS及JQuery对Html内容编码,Html转义
2017/02/17 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
简单实现js点击展开二级菜单功能
2017/05/16 Javascript
详解Vue中过度动画效果应用
2017/05/25 Javascript
vue动态子组件的两种实现方式
2019/09/01 Javascript
Vue双向绑定实现原理与方法详解
2020/05/07 Javascript
v-slot和slot、slot-scope之间相互替换实例
2020/09/04 Javascript
基于Ionic3实现选项卡切换并重新加载echarts
2020/09/24 Javascript
python实现数通设备端口监控示例
2014/04/02 Python
Python创建xml的方法
2015/03/10 Python
编写Python脚本来实现最简单的FTP下载的教程
2015/05/04 Python
解决python nohup linux 后台运行输出的问题
2018/05/11 Python
python 移除字符串尾部的数字方法
2018/07/17 Python
Python将json文件写入ES数据库的方法
2019/04/10 Python
Windows平台Python编程必会模块之pywin32介绍
2019/10/01 Python
keras分类模型中的输入数据与标签的维度实例
2020/07/03 Python
新西兰珠宝品牌:Michael Hill
2017/09/16 全球购物
Ted Baker美国官网:英国时尚品牌
2018/10/29 全球购物
EJB的激活机制
2013/10/25 面试题
银行工作检查书范文
2014/01/31 职场文书
空气环保标语
2014/06/12 职场文书
工作经常出错的检讨书
2014/09/13 职场文书
行风评议整改报告
2014/11/06 职场文书
考试作弊检讨书怎么写?
2014/12/21 职场文书
入党积极分子个人总结
2015/03/02 职场文书
2015年保卫科工作总结
2015/05/14 职场文书
一个成功的互联网创业项目,必须满足这些要求
2019/08/23 职场文书
Java基础之this关键字的使用
2021/06/30 Java/Android
一条慢SQL语句引发的改造之路
2022/03/16 MySQL