在CI中你可以这样很简单地装载library:

    $this->load->library('newclass');
    注意系统中会有两个library目录,一个是system/application/libraries,还有一个是system/libraries,加载的时候系统会自动地检查两个地方,前者的优先级高于后者,这个不错。
    如果要处理session,可以这样提前加载:
    $this->load->library('session');
    这个一般可以放到构造器中,当然也可以在某个方法中单独加载。如果是用的多,可以修改config文件让每个页面自动加载:
    $autoload['libraries'] = array('session');
    信息可以这样加入session
    $newdata = array(
     'status' => 'OK',
                    );
    $this->session->set_userdata($newdata);
    读取:
    $status = $this->session->userdata('status'); userdata()是一个函数。

如果使用下面 set_userdata()函数的写法,可以每次只添加一个用户数据。

$this->session->set_userdata('some_name', 'some_value');

安全

通过修改config文件的二处设置可增加安全性:

。 sess_match_ip: 如果你设定这个参数为TRUE, 当它读取会话数据时,CI 将会尝试相配使用者的 IP 地址。这将预防使用者使用'抢'来的cookie信息。但是,有些服务器 (ISP和大公司服务器) 可能存在不同 IP 地址上的相同使用者登录的请求。如果你设定这个参数为TRUE,可能会给他们造成麻烦。

。 sess_match_useragent: 如果你设定这为TRUE, 当读取会话数据的时候, CI将会试着匹配使用者代理。这意谓试着“抢夺”会话的人还需要匹配真正用户的user agent设置。 它使“抢夺”变得稍稍有些困难。

CI 也有一个 user_agent 类, 你可以这样装载:

$this->load->library('user_agent');

一旦装载, 你能要求它返回访问你网站的浏览器和操作系统的各种信息, 而不管它是一个浏览器,手机或机器人。 比如,如果你想列出叁观你的网站的机器人,你可以这样做:

$fred = $this->agent->is_robot();
if ($fred == TRUE)
    {$agent = $this->agent->agent_string();
/*add code here to store or analyse the name the user agent is returning*/
}

类通过装入后开始工作, 与用代理,浏览器,机器人和其它的类型的数组作比较,这个数组存放在system/application/config/user_agents。

如果你愿,你可以容易开发出使你的网站锁定特定机器人,特定浏览器类型的功能。不过,记得一个攻击者很容易写出一个代理类型,并返回他想要扔给你的那种类型。因此,他们能容易地伪装成通常的浏览器。 许多机器人,包括象CI 的 user_agents 数组已列出的 Googlebot,是'品行端正的'。 这意味着如果你设定你的 robots.txt 文件排除他们,他们将不会强行攻击。没有容易的方法去阻击一个不知名的的机械手,除非你预先知道他们的名字!

在 CI框架中 ,会话机制保存那发出请求的 IP 地址,因此你可以使用这个功能维护一个网站的黑名单。可以用如下代码取回来自会话的 IP:

/*remember to load the library!*/
   $this->load->library('session');
/*look for an 'ip_address' variable in the contents of the session cookie*/
$ip = $this->session->userdata('ip_address');

因此你能针对黑名单作相应的安全处理,比如拒绝登录。

你也可以用CI 的会话机制限制来自重复请求的损害-像是一个机器人通过重复地请求网页来使你的网站超载。 你也可以使用这一个机制处理 '字典'攻击,即一个机器人不断重复尝试数百或者数以千计的密码/用户名组合直到它找到正确的一组。

因为 CI 的会话类保存每个会话的last_activity ,所以你能做到这一点。 每次,当网页被请求时, 你能检查多久以前这个IP地址的用户发出一请求,两次请求的间隔如果不正常,你可以终止会话,或放慢响应的速度。

参考http://codeigniter.org.cn/forums/thread-212-1-1.html

转自:http://xinbituya.blogbus.com/logs/21830169.html

CodeIgniter中的session处理的更多相关文章

  1. CodeIgniter配置之SESSION

    刚使用Codeigniter时也被其中的SESSION迷惑过,后来就再也没用过CI自带的SESSION,想必还是有必要整理一下SESSION.为弄清CI中的SESSION,先来说一下PHP中SESSI ...

  2. 在 ASP.NET CORE 中使用 SESSION

    Session 是保存用户和 Web 应用的会话状态的一种方法,ASP.NET Core 提供了一个用于管理会话状态的中间件.在本文中我将会简单介绍一下 ASP.NET Core 中的 Session ...

  3. Tomcat中的Session小结

    什么是Session 对Tomcat而言,Session是一块在服务器开辟的内存空间,其存储结构为ConcurrentHashMap: Session的目的 Http协议是一种无状态协议,即每次服务端 ...

  4. .ashx中使用Session

    在一般处理程序中给session赋值是报错:未将对象引用设置到对象的实例.

  5. strust2中使用session

    在Struts2里,如果需要在Action中使用session,可以通过下面两种方式得到1.通过ActionContext class中的方法getSession得到2.Action实现org.apa ...

  6. 在IHttpHandler中获取session

    因为业务要异步通过IHttpHandler获得数据,但还要根据当前登录人员的session过滤,因此要在在IHttpHandler中获取session 方法是HttpHandler容器中如果需要访问S ...

  7. Java中对session的简单操作

    1.jsp中操作session <% String name=(String)request.getSession().getAttribute("username"); / ...

  8. ASP.NET中的Session怎么正确使用

    Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换时,Session对象的变量不会被清除. 对于一个Web应用 ...

  9. 如何在报表权限中使用session

    1. 问题描述 权限中使用session,一般是用来存放用户名和密码,下面以报表开发工具FineReport为例,分两种情况介绍用户名和密码的保存: 2. 同一应用下session 由于session ...

随机推荐

  1. List用法

    定义一个类: using System;using System.Collections.Generic;using System.Linq;using System.Web; namespace W ...

  2. oracle rac 安装脚本

    1. 配置/etc/hosts 网络 192.168.1.111 rac1 rac1.oracle.com192.168.1.182 rac1-vip 192.168.1.222 rac2 rac2. ...

  3. js判断年龄是否在0-100之间

    //判断年龄 $('#info_age').change(function(){ var _val = $(this).val(); -]+$/.test( _val ))||_val< || ...

  4. Nancy 搭建

    Nancy 框架 1.是一个轻量级用于构建http相应的web框架: 2.与mvc类似,有自己的路由机制: 3.可以处理 DELETE ,   GET ,   HEAD ,   OPTIONS ,   ...

  5. poj1637 Sightseeing tour 混合图欧拉回路判定

    传送门 第一次做这种题, 尽管ac了但是完全不知道为什么这么做. 题目就是给一些边, 有向边与无向边混合, 问你是否存在欧拉回路. 做法是先对每个点求入度和出度, 如果一条边是无向边, 就随便指定一个 ...

  6. ExtJS 修改load paging时的参数

    ExtJS 的pagingToolbar 在翻页的时候传入的参数是固定的  分别是start 和 limit(其中limit的值就是store.pageSize的值) 如何在每次翻页的时候传入自己的参 ...

  7. HDU 5755 Gambler Bo(高斯消元)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5755 [题目大意] 一个n*m由0,1,2组成的矩阵,每次操作可以选取一个方格,使得它加上2之后对 ...

  8. Codeforces Gym10008E Harmonious Matrices(高斯消元)

    [题目链接] http://codeforces.com/gym/100008/ [题目大意] 给出 一个n*m的矩阵,要求用0和1填满,使得每个位置和周围四格相加为偶数,要求1的数目尽量多. [题解 ...

  9. 《Linux内核设计与实现》内存管理札记

    1.页 芯作为物理页存储器管理的基本单元,MMU(内存管理单元)中的页表,从虚拟内存的角度来看,页就是最小单位. 内核用struct page结构来标识系统中的每个物理页.它的定义例如以下: flag ...

  10. PL/SQL 基础编程

    PL/Sql 编程 PL/Sql结构 [declare] --声明变量 begin --执行部分 [exception] ---异常处理部分 end PL/Sql  基本数据类型 数值类型 1. nu ...