V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
loogle
V2EX  ›  PHP

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

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

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

    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 的 cookie 的最大保存时间,我这写法没错,我也找到了原因所在,原来我在首页的控制器中用到了 session,这个时候 session_start()这个函数已经把默认 session 配置加载进来,而我在登录的时候去再去改默认配置已经不行了,我把首页的 session-start()去掉,果然可以保存一星期了
    loogle
        7
    loogle  
    OP
       2017-04-07 16:11:57 +08:00
    @vibbow 查了好多资料,果然是我搞错了,一直想把信息存 session 里,谢谢指点!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2949 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 14:34 · PVG 22:34 · LAX 06:34 · JFK 09:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.