PHP 的 ini_set 函数无法在类方法内使用吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
loogle
V2EX    PHP

PHP 的 ini_set 函数无法在类方法内使用吗?

  •  
  •   loogle 2017-04-06 19:29:23 +08:00 2570 次点击
    这是一个创建于 3127 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想做一个‘一星期内自动登录’功能,后端登录代码如下:`

    class loginController extends core\lib\Controller{ public function login() { if($_POST['autoLogin']==1) { ini_set('session.gc_maxlifetime', "604800"); // ini_set("session.cookie_lifetime","604800"); // 秒 } session_start(); if(strtolower($_SESSION['vCode'])!=strtolower($_POST['vCode'])) { echo 'vCode_error'; exit(0); } $model=new mongoModel('wind','users'); $name=$model->findOne('name',$_POST['username']); if(!empty($name)) { if($name['password']==$_POST['password']) { $_SESSION['username']=$_POST['username']; echo 'success'; } else echo 'password_error'; } else { echo 'user_error'; } } }` 

    通过前端传来的‘ autoLogin ’值来判断用户是否选择了‘一周内自动登录’这个 checkbox,如果选择,则更改 session 和保存了 sessionid 的 cookie 的最大保存时间为 1 个星期。但是我发现这样不行, cookie 的有效期依然为结束会话时销毁,但是我把:

    ini_set('session.gc_maxlifetime', "604800");
    ini_set("session.cookie_lifetime","604800");

    这两段代码放到项目入口文件里, cookie 的有效期成功到了一个星期以后,这是为啥呢?作用域的问题吗? 新手求问。

    7 条回复    2017-04-07 16:11:57 +08:00
    vibbow
        1
    vibbow  
       2017-04-06 22:45:56 +08:00
    好像 LZ 对 session 的用法产生了一些理解上的偏差......
    msg7086
        2
    msg7086  
       2017-04-07 01:26:35 +08:00
    为什么用户的登录选项代码里你要修改服务器的综合配置?
    loogle
        3
    loogle  
    OP
       2017-04-07 13:46:38 +08:00
    @msg7086 难道除了修改服务器配置还有其他办法修改 session 的保存时间吗
    loogle
        4
    loogle  
    OP
       2017-04-07 13:49:28 +08:00
    @vibbow 刚接触 php 不久,是哪儿出问题了呢?谢谢!
    vibbow
        5
    vibbow  
       2017-04-07 14:11:56 +08:00
    @loogle
    session 之所以称之为 session ,就是给当前会话用的,浏览器关了会话就结束了。
    你要做自动登录,信息是需要存在 cookies 里,而不是 session 里的。
    更不是通过 session 存在 cookies 里...
    loogle
        6
    loogle  
    OP
       2017-04-07 14:40:31 +08:00
    @vibbow 你这也是解决方法,信息都放在 cookie 里很容易实现自动登录,但很不安全,还是放服务端安全一些,你不可能通过判断是否存在 cookie 就自动登录吧。客户端是靠存在 cookie 里的一个 session id 与服务端 session 通信的,一个 seeion id 对应一个连接,要用 session 存信息就离不开 cookie ,假设要把信息保存一星期,除了设置 session 最大保存时间外还要设置存放了 session id 的 cooki 的最大保存时间,我这写法没错,我也找到了原因所在,原来我在首页的控制器中用到了 session,这个时候 session_start()这个函数已经把默认 session 配置加载进来,而我在登录的时候去再去改默认配置已经不行了,我把首页的 session-start()去掉,果然可以保存一星期了
    loogle
        7
    loogle  
    OP
       2017-04-07 16:11:57 +08:00
    @vibbow 查了好多资料,果然是我搞错了,一直想把信息存 session 里,谢谢指点!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     948 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 22:09 PVG 06:09 LAX 15:09 JFK 18:09
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86