您的位置:首页 > 编程语言 > PHP开发

CI Session(一)

2015-11-27 11:17 507 查看
最近重点关注了一下PHP Session。首先概括几个概念:

(1) session_name,也是cookie_name,实质是session文件前缀,和session_id构成针对不同用户的session文件,文件内存储了会话信息,会话信息主要是你存储到$_SESSION中的键值对;

(2)session_id,服务器针对不同用户生成的字符串,对于浏览器-服务器模式,可以不需要显示生成,浏览器请求服务端时会通过cooki发送session_id,通常格式是session_name = session_id;

(3)session_start,开启session,开启后才能存储键值对到对应的session文件

(4)session_destroy清空session_id对应的文件

(5)session_set_save_handler($class,TRUE)自定义session存储机制,如数据库存储等

1.CI Session

(1)CI Session库封装了Session存储操作的常见方法,包括userdata,set_userdata,sess_destroy等,具体可查看官方手册http://codeigniter.org.cn/user_guide/libraries/sessions.html;

(2)CI Session自带四种session存储方式,常见的文件file,还有数据库存储database,memcached,redis。对于文件之外的存储方式涉及到PHP内置会话存储机制之外的方式,需要自定义会话存储函数,使用到函数session_set_save_handler($class,TRUE);

(3)CI Session涉及到的session配置都在config文件中,session类中通过_config抓取。

2.开发APP接口

使用PHP开发APP接口时,我们使用session来存储用户会话信息,此时需要显示生成session_id和指定session_id($name),因为手机APP默认不发送cookie。APP第一次登陆,验证通过,开启session session_start;为该用户生成唯一的session_id,并返回给APP,然后存储用户信息到session文件;当用户再次请求其他接口时,通过session来做简易的安全过滤,APP通过指定参数signature来传递登录时获得的session_id,如果存在该session_id,并有有效用户信息,说明当前请求者是有效用户,给予调用相应接口的权限。

这里有几个问题要注意:

(1)登录时,先开启session_start(),然后生成session_id,再存储键值对;

(2)登录后请求其他接口需要验证通过时,先获得signature,通过session_id($signature)指定session_id,再开启session_start,并获得用户的相关信息;

(3)默认session的存储路径是系统盘的tmp,存储时间是1440(24分),对于APP而言这是不实际的,用户登录了希望不退出时永久有效,所以可以将session存储到指定目录下,如CI默认是cache目录;并通过ini_set(session.gc_maxlifetime)设置有效时间,常见做法是每次请求接口时都在当前时间上加时间(time()+7200),这样,如果两小时内无任何操作session自动失效,APP端通常希望用户不退出,session永久有效。

3.CI_session的缺点

(1)CI_session默认采用文件存储的方式将session文件存储在cache目录下,文件存储读写速度慢,用户量大时最好采用分布式缓存的方式存储到memcache或redis;

(2)CI_session中session存储文件默认不会自动删除,会造成空间浪费
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PHP-sessio