session过期时间!

seniorphper 2014-01-26 09:52:57
在php.ini中设置了session.cookie.lifetime和session.gc_maxlifetime为86400;有如下代码:


//注:es_session::set()与es_session::get()为框架专属设置和获取session的方法。


$time=strtotime(date("Y-m-d",(time()+3600*8))." 23:59:59");
$passed=es_session::get("today");
if($passed){
es_session::set("today",$passed+1,$timeend-(time()+3600*8));
}else{
es_session::set("today",1,$timeend-(time()+3600*8));
}

现在一款游戏限制用户每天只能玩10次,$passed为用户已经玩过的次数,如果发现$passed大于10则关闭游戏进入权限。以上代码是否能准确记录每天游戏次数呢?
...全文
164 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2014-01-26
  • 打赏
  • 举报
回复
你设置的过期时间为一天(86400秒),并没有说是从 00:00:00 开始

而 session.cookie.lifetime 和 session.gc_maxlifetime 都是从最后一次有效访问开始计算的
黄袍披身 2014-01-26
  • 打赏
  • 举报
回复
引用 5 楼 u012845756 的回复:
[quote=引用 2 楼 PhpNewnew 的回复:] cookie ip 手机验证码 什么的 把这些能捆绑起来的东西都捆绑起来,如果你觉得需要这么严格的话.
倒不需要这么严格,现在只是时间控制的不对[/quote] 每天只能玩10次,那么我用N个账号的话你打算怎么控制呢?
seniorphper 2014-01-26
  • 打赏
  • 举报
回复
引用 2 楼 PhpNewnew 的回复:
cookie ip 手机验证码 什么的 把这些能捆绑起来的东西都捆绑起来,如果你觉得需要这么严格的话.
倒不需要这么严格,现在只是时间控制的不对
seniorphper 2014-01-26
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
不能!你应该用 cookie 保存次数 因为 session 临时文件有可能被 gc 进程删去
现在次数是可以记住,问题是第二天它并没有按时清空前一天记录的次数,导致第二也玩不了。
legendnan 2014-01-26
  • 打赏
  • 举报
回复
两大版主都在。我就过来凑凑热闹
黄袍披身 2014-01-26
  • 打赏
  • 举报
回复
cookie ip 手机验证码 什么的 把这些能捆绑起来的东西都捆绑起来,如果你觉得需要这么严格的话.
xuzuning 2014-01-26
  • 打赏
  • 举报
回复
不能!你应该用 cookie 保存次数 因为 session 临时文件有可能被 gc 进程删去
xuzuning 2014-01-26
  • 打赏
  • 举报
回复
是谁说的? 如果你在08:00:00又玩了一次,那么 session 的过期时间就是 8:00:00 + 24:00:00
seniorphper 2014-01-26
  • 打赏
  • 举报
回复
补充一下:$timeend=strtotime(date("Y-m-d",(time()+3600*8))." 23:59:59");当天24:00:00的时间戳
seniorphper 2014-01-26
  • 打赏
  • 举报
回复
引用 7 楼 xuzuning 的回复:
你设置的过期时间为一天(86400秒),并没有说是从 00:00:00 开始 而 session.cookie.lifetime 和 session.gc_maxlifetime 都是从最后一次有效访问开始计算的
我设置的是最长存储时间为24小时, if($passed){ es_session::set("today",$passed+1,$timeend-(time()+3600*8)); }else{ es_session::set("today",1,$timeend-(time()+3600*8)); } 从上面代码来看,如果你在00:00:00点开始玩了一次,那么session记录会在24小时后过期,如果你在08:00:00又玩了一次,那么今天所玩次数变为2,周时记录会在16个小时后过期,总之session记录存活不会24小时。但现在我觉得出现了这种情况,假如我在23:30:00玩了一次,它并没有在24:00:00把记录给清除,而是延续到了第二天,结果就是本来我第二天可以玩10次,结果因为前一天的记录而只能玩9次。

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧