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存储文件默认不会自动删除,会造成空间浪费
(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存储文件默认不会自动删除,会造成空间浪费
相关文章推荐
- wampserver2.4 phpstrom xdebug断点调试
- PHP连接打印机
- php同步mysql两个数据库中表的数据
- 防篡改php文件校验程序
- 转载:PHP,MySQL的安装与配置
- laravel homestead
- PHP 服务器变量$_SERVER 服务器环境变量 $_ENV
- YII2 Gii 服务器上不能访问
- php时间设置为本地
- php +mysql 添加 删除 修改 insert into delete update
- PHP实用函数 过滤数据
- PHP脚本和JAVA连接mysql数据库
- php中curl_multi的应用
- Curl批量打开网址的PHP类,curl_multi_init
- 在PHP代码中经常能看到一些类似PG(), EG()之类的函数,他们都是PHP中定义的宏,这系列宏主要的作用是解决线程安全所写的全局变量包裹宏, 如$PHP_SRC/main/php_globals.
- ftp上传工具类
- php中cookie和session
- Phpcms V9当前栏目及所有二级栏目下内容调用标签
- doubang中tinyRTP传输逻辑
- PHP生成唯一订单号