session会话

php中的session相关
  1. session_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存储机制,如数据库存储等。
CodeIgniter(简称CI) 中对session的封装

CodeIgniter是一个MVC模式的php框架。

  1. CI_ession库封装了Session存储操作的常见方法,包括userdata,set_userdata,sess_destroy等,具体可查看官方手册
  2. CI_session自带四种session存储方式,常见的文件file,还有数据库存储database,memcached,redis。对于文件之外的存储方式涉及到PHP内置会话存储机制之外的方式,需要自定义会话存储函数,使用到函数session_set_save_handler($class,TRUE);
  3. CI_session涉及到的session配置都在config文件中,session类中通过_config抓取。
session在Api接口中的应用

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

注意事项

  • 登录时,先开启session_start(),然后生成session_id,再存储键值对;
  • 登录后请求其他接口需要验证通过时,先获得signature,通过session_id($signature)指定session_id,再开启session_start,并获得用户的相关信息;
  • 默认session的存储路径是系统盘的tmp,存储时间是1440(24分),对于APP而言这是不实际的,用户登录了希望不退出时永久有效,所以可以将session存储到指定目录下,如CI默认是cache目录;并通过ini_set(session.gc_maxlifetime)设置有效时间,常见做法是每次请求接口时都在当前时间上加时间(time()+7200),如果两小时内无任何操作session自动失效,APP端通常希望用户不退出,session永久有效。

CI_session库的缺点

  1. CI_session默认采用文件存储的方式将session文件存储在cache目录下,文件存储读写速度慢,用户量大时最好采用分布式缓存的方式存储到memcache或redis;
  2. CI_session中session存储文件默认不会自动删除,会造成空间浪费。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值