怎么在CodeIgniter中对会话进行配置

  介绍

这篇文章给大家介绍怎么在CodeIgniter中对会话进行配置,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

使用CodeIgniter时也被其中会话的迷惑过,后来就再也没用过CI自带的会话,想必还是有必要整理一下会议。为弄清词中的会话,先来说一会话下PHP中是如何工作的。由于HTTP协议本身是无状态的,所以当保留某个用户的访问状态信息时,需要客户端有一个唯一标识传给服务端,这个唯一标识就是会话ID,存放在客户端的饼干中,然后服务端根据该标识读取存放的用户状态信息,达到保存会话状态的目的。PHP中启动一个会话需要执行下面语句:

代码如下:

session_start ();

1,客户端每次请求时会有一些信息存放中HTTP头中发送给服务端,以用户第一次访问为例:

代码如下:

请求头
接受:text/html, application/xhtml + xml应用程序/xml; q=0.9,图像/webp */*; q=0.8
接受编码:gzip、缩小,sdch
接收语言:应用,zh型;q=0.8
cache - control:信息=0
连接:维生
主持人:s.local
user - agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML,像壁虎)Chrome/31.0.1650.63 Safari 537.36

2,服务端接到请求处理后并返回给客户端,并在HTTP响应中加上添加饼干的请求,告诉浏览器需要设置一个饼干,饼干名为PHPSESSID,值为r887k5n4scg32d4ba34huuhmq7,如:

代码如下:

响应头
cache - control:不是商店,no - cache, must-revalidate,任职考核=0,提前预支了=0
连接:维生
内容长度:0
的content - type: text/html
日期:太阳,2013年12月08年12:56:56
到期格林尼治时间:星期四,1981年11月19日格林尼治时间08:52:00
维生:超时=5,max=100
杂注:no - cache
服务器:Apache/PHP . 2.2.11 (Win32)/5.4.7
set - COOKIE: PHPSESSID=r887k5n4scg32d4ba34huuhmq7;路径=/
X-Powered-By: PHP/5.4.7

3,当客户端再次访问该网站的页面时,浏览器会将该COOKIE发送给服务端,服务端根据COOKIE的值去读取服务器上存放会话的文件,拿到到会话信息,如:

代码如下:

请求头
接受:text/html, application/xhtml + xml应用程序/xml; q=0.9,图像/webp */*; q=0.8
接受编码:gzip、缩小,sdch
接收语言:应用,zh型;q=0.8
cache - control:信息=0
连接:维生
饼干:PHPSESSID=r887k5n4scg32d4ba34huuhmq7
主持人:s.local
user - agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML,像壁虎)Chrome/31.0.1650.63

从而达到保存会话状态的目的。但也需要注意,如果获取到用户一登录的会话ID会怎么样?根据上面的逻辑,如果在请求过程中把获取到的会话ID一并发送给服务端,服务端根据会话ID读取文件,发现文件内容存在,从而判定用户为一个用户,也就是获取到了一个用户的用户状态,从而可能可以进行一些敏感操作,所以在会话有效期内,获取到了会话ID即获取到了用户的授权,这是比较危险的,以本地的一个管理系统为例,通过Chrome登录后查看到客户端饼干如下图:

怎么在CodeIgniter中对会话进行配置

假如如果通过某种手段获取到了会话ID,可以模拟发送一个相同的饼干过去即可实现登录.FireFox中可添加饼干,打开Firebug后饼干中新建COOKIE,确定之后刷新页面即可登录到管理系统,如下图:

怎么在CodeIgniter中对会话进行配置

通常情况下可通过js获取到饼干,所以需要注意转义,防止数据展示时被执行了。接下来看看CI中的会议。在配置文件中有几个跟会话配置相关的参数,影响到会话的使用,它们是:

//会话保存在COOKIE中的名称   $ config [& # 39; sess_cookie_name& # 39;],=, & # 39; ci_session& # 39;;//会话的有效时间   $ config [& # 39; sess_expiration& # 39;],=, 7200;//是否关闭浏览器会话失效   $ config [& # 39; sess_expire_on_close& # 39;],=,假;//会话是否加密存放在COOKIE中   $ config [& # 39; sess_encrypt_cookie& # 39;],=,假;//是否保存在数据库中   $ config [& # 39; sess_use_database& # 39;],,=,假;//存在数据库中,则数据库表名   $ config [& # 39; sess_table_name& # 39;],=, & # 39; ci_sessions& # 39;;//是否匹配IP   $ config [& # 39; sess_match_ip& # 39;],,=,假;//是否匹配UserAgent   $ config [& # 39; sess_match_useragent& # 39;],=,真的;//更新时间时间   $ config [& # 39; sess_time_to_update& # 39;],=, 300;

CI自带的会话没有服务端文件存储,所有的信息都存放在客户端饼干中,当调用$ this→负载→库(& # 39;会话# 39;);时会启动一个会话,即设置一个饼干,饼干的内容如下:

怎么在CodeIgniter中对会话进行配置